C# Vérifie si la chaîne contient toutes les correspondances dans un tableau de chaînes
Quel serait le moyen le plus rapide pour vérifier si une chaîne contient toutes les correspondances dans un tableau de chaînes en C#? Je peux le faire à l'aide d'une boucle, mais je pense que ce serait trop lent.
Pourquoi pensez-vous qu'il serait trop lent? Avez-vous testé? Quelle est la taille typique de votre ensemble de données? Deviner comme ça, c'est une perte de temps.
Pouvez-vous préciser les entrées et le résultat souhaité?
Il contient environ 60 articles, mais dans le même événement, j'ai plus de code. La Performance est OK, mais je me demandais juste si je pouvais avoir optimisé.
Voir stackoverflow.com/questions/2930953/...
"La Première Règle de l'Optimisation du Programme: ne pas le faire. La Deuxième Règle du Programme d'Optimisation (pour les experts seulement!): Ne le faites pas encore." - Michael A. Jackson (en.wikipedia.org/wiki/Program_optimization#Quotes)
Pouvez-vous préciser les entrées et le résultat souhaité?
Il contient environ 60 articles, mais dans le même événement, j'ai plus de code. La Performance est OK, mais je me demandais juste si je pouvais avoir optimisé.
Voir stackoverflow.com/questions/2930953/...
"La Première Règle de l'Optimisation du Programme: ne pas le faire. La Deuxième Règle du Programme d'Optimisation (pour les experts seulement!): Ne le faites pas encore." - Michael A. Jackson (en.wikipedia.org/wiki/Program_optimization#Quotes)
OriginalL'auteur rayanisran | 2010-11-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez combiner les cordes avec la regex ou consolidés", et puis "faire en une seule passe," mais, techniquement, la regex serait encore la réalisation d'une boucle interne. Finalement, la boucle est nécessaire.
même regex besoins en boucle, je pense que dans la plupart des cas, il est encore plus rapide que de le faire manuellement. De plus, il contribue à l'assainissement de code et donc plus facile à maintenir, dire, vous avez besoin de changer les matchs critères.
Certaines personnes, lorsqu'ils sont confrontés à un problème, pense que “je sais, je vais utiliser des expressions régulières.” Maintenant, ils ont deux problèmes.
OriginalL'auteur Brent Arias
À l'aide de LINQ:
Accordée, vous voudrez peut-être prendre de la culture et de la casse, mais c'est l'idée générale.
Aussi, si l'égalité n'est pas ce que vous entendez par "correspond à", vous pouvez toujours vous la fonction que vous voulez utiliser pour le "match".
OriginalL'auteur Esteban Araya
Je ne pouvais vraiment pas vous dire si cela est absolument le moyen le plus rapide, mais l'un des moyens que j'ai souvent fait c'est:
Il s'agira de vérifier si la chaîne contient l'une des chaînes de la matrice:
Pour vérifier si la chaîne contient toutes les chaînes (éléments) de la matrice, il suffit de changer
myStrings.Any
dans l'instruction if pourmyStrings.All
.Je ne sais pas quel genre d'application c'est, mais j'ai souvent besoin d'utiliser:
Donc, si vous êtes de vérifier la saisie de l'utilisateur, il ne sera pas question, de savoir si l'utilisateur saisit la chaîne en majuscules, ce qui pourrait facilement être inversé à l'aide d'ToLowerInvariant().
Espère que cela a aidé!
OriginalL'auteur SomeRandomProgrammer
Qui fonctionne bien pour moi:
Where
déclaration dans ASP.NET de Base.OriginalL'auteur David
Si le "tableau" ne changera jamais (ou de changement que rarement), et vous aurez beaucoup de chaînes d'entrée que vous faites des tests contre elle, alors vous pouvez construire un
HashSet<string>
de la matrice.HashSet<T>.Contains
est un O(1), par opposition à une boucle qui est O(N).Mais il faudrait une certaine (petite) quantité de temps pour construire le HashSet. Si le tableau va changer fréquemment, puis une boucle est la seule voie réaliste pour le faire.
OriginalL'auteur Joe White