0
votes

Manière rapide pour string.except comme liste.except

Comme le nouveau .NET 6, 7 et ainsi de suite, nous avons une classe à l'exception des listes. XXX PRE>

Ma question est, comment va-t-il aller au mieux une version à chaîne du même Classe: p> xxx pré>

Obtenir le résultat =

trois p> code> p>

P> P> P> P> P> >

hr


6 commentaires

Qu'est-ce que 0 et 7? Je connais le dernier .NET Framework 4.7 et .NET CORE 2.2.


Je me demande quel algorithme produirait

trois des deux cordes. Vous devrez penser à cette première, peut-être avec un crayon et du papier.


Il semble que nous ayons un XY Problème avec cette question. S'il vous plaît dites-nous ce que vous êtes en fait essayer d'atteindre?


À la recherche de la différence dans les chaînes A et B. Ainsi, l'instruction sauf qui fonctionne avec des listes.


Si vous souhaitez obtenir un effet sauf, vous devrez convertir vos chaînes à des listes de sous-chaînes, puis appliquez sauf. Donc, vous auriez besoin d'analyser votre fragment HTML dans une liste de "

un " , "

deux " , etc. Guillermo Gutiérrez vous donne les bases pour cela.


CIPRIAN VILCAN A fait un très bon travail d'expliquer pourquoi votre code d'origine ne fonctionne pas.


4 Réponses :


1
votes

Lorsque vous utilisez la méthode de l'extension sauf (), le type de retour est une liste de caractères.

Documentation

En outre, A.Excepts (B) ne produira jamais ce que vous voulez, car il convertit la chaîne en tableaux de caractère. Donc, il supprimera chaque char de A qui est présent en b.

Vous devez penser à un algorithme différent de le faire.


0 commentaires

-2
votes

Utiliser String c = nouvelle chaîne (A.Except (b) .toarray ());


2 commentaires

Cela ne produira pas le résultat attendu, au fait.


Une solution pratique pour les tableaux de caractère - merci!



0
votes

wnat que vous voulez n'est pas sauf , car il s'agit d'une opération définie appelée Définir la différence ou le complément relatif , dans lequel vous dites que vous souhaitez que les éléments d'un ensemble qui ne soient pas présents dans un autre.

Vous pouvez obtenir le résultat que vous attendez avec Groupes d'expressions régulières à la place: xxx

avec le régulier expression ^

une

deux (? [<> / \ w] +) $ vous dites que La chaîne devrait commencer ( ^ ) avec

un

deux et la fin ( $ < / strong>) avec , et que tout ce qui existe entre celui-ci contient << / fort>, > , / , ou n'importe quel caractère alphanumérique ( \ w ) plus d'une fois ( + ), sera ajouté au groupe nommé Mid dle .

Cependant, je ne vous recommanderais pas de Essayez d'analyser HTML avec regex ...


0 commentaires

5
votes

Il y a deux problèmes avec votre solution.

Comportement de Tostring ()

Lorsque vous faites .Tostring () sur un iénumérable, il imitera toujours le type. Cela est dû au fait que iEnumerable ne remplace pas le comportement de Tostring (). Voir Tostring Pour plus d'informations sur cela.
Si vous souhaitez convertir un iEnumerable (le type de retour de sauf) à une chaîne, vous devrez faire xxx


Comportement de A.Except (B)

La méthode à l'exception ne fonctionne pas vraiment comme vous le pensez.
de
Prenons par exemple le code suivant: xxx

Le résultat de ce serait {1}. Quelle est la méthode effectivement renvoie une nouvelle énumération de tous les INT qui sont présents dans un, mais pas en b.
de
Maintenant, les chaînes ne sont qu'une énumération de caractères - plus précisément, votre xxx

de la perspective de Linq est équivalent à xxx

La même chose va pour B.
de
Donc, lorsque vous faites un fichier A.EXCEPT (B), quel Linq fera-t-il réellement passera à travers chaque personnage et voyez s'il peut le trouver dans B. Si tel est le cas, cela ne se retrouve pas dans le jeu de résultats. Maintenant, puisque tous les caractères d'A sont également présents dans B, vous obtiendrez une chaîne vide. Pour voir que c'est en fait le cas, modifiez légèrement A de sorte qu'il contient un caractère non in b: xxx

si vous faites maintenant xxx

Ce que vous obtiendrez est "alp".

Solution

À mon avis, la meilleure façon de faire, sauf pour analyser vos chaînes, transformez-les en objets, puis faites l'exception. Aucun algorithme intégré n'a la capacité de dire que vos chaînes sont en réalité structurées et comment la différencier parmi eux. Et en tant que solution de travail utilisant HTMLAGILITERPACK (un package Nuget) < Pré> XXX

Je vous laisserai faire une approche plus générale :)
Mais l'idée est que si vous le souhaitez, sauf de travailler comme vous l'attendez, vous devrez le demander de travailler avec des chaînes, pas des caractères.
de
Si vous faites l'analyse requise pour extraire les composants de votre chaîne (les éléments

dans cet exemple) à l'aide de HTMLagilityPack ou de regex, comme suggéré dans d'autres solutions, est entièrement à vous.


2 commentaires

C'est bon et complet en termes d'informations, mais cela ne propose pas de solution.


Merci CIPRIAN VILCAN, j'apprécie vos efforts ici!