Moyen le plus rapide pour trouver un élément dans une liste?
J'ai une liste non triée de chaînes. Je peux placer ces éléments dans un tableau, une Liste, un SortedList, que ce soit.
J'ai besoin de trouver le moyen le plus rapide de la recherche d'une chaîne dans la liste. Suis-je mieux de dumping de la liste dans un tableau, le tri, la mise en œuvre binaire de recherche? Ou est-ce le cadre offrent une façon de le faire?
Grâce
P. S. à l'Aide de VS2008 contre .NET 2.0
OriginalL'auteur AngryHacker | 2010-01-16
Vous devez vous connecter pour publier un commentaire.
Si votre but est juste de faire très rapide pour trouver les chaînes dans une collection, les mettre dans un HashSet.
HashSet.Contient est un O(1) méthode, et les cordes ont un bon algorithme de hachage par défaut, de sorte qu'il sera difficile de faire une routine plus rapide que cela.
Edit:
Depuis que vous utilisez .NET 2, je voudrais juste faire
Dictionary<string,string>
et utilisez la même chaîne de clé et la valeur.Dictinoary<TKey,TValue>.Contains
est également en O(1), et sera beaucoup plus rapide que n'importe quelle liste de de la recherche par vous tenter.Il faut donc utiliser un
Hashtable
N' .Net n'ont pas vraiment d'équivalent à HashSet?
.NET est un HashSet, maintenant. Elle n'a pas en 2.0.
+1 Fascinante. Quand j'ai lu la question, j'ai interprété "look up" pour signifier quelque chose de plus que de déterminer si oui ou non une chaîne de caractères "existe" dans la collection 🙂 N'utilisez plus .NET 2.0, mais je n'aurais jamais pensé à utiliser un Dictionnaire dans la façon dont vous le suggérer. merci,
OriginalL'auteur Reed Copsey
Si vous n'avez qu'à trouver un seul objet, une seule fois, il suffit de commencer au début et regardez-les un à un jusqu'à ce que vous trouver. Si vous devez répéter cette opération plusieurs fois par rapport à la même liste, pour trouver différents éléments, puis de les trier conserver la liste triée et faire une recherche binaire...
OriginalL'auteur Charles Bretana
Je ne sais pas si ce sera d'aucune utilité pour vous, mais ce serait une manière assez simple de le faire, vous ne savez pas sur la même "vitesse" de la il cependant.
C'est probablement la façon la plus lente à la recherche de la liste. Si vous triez, vous pourriez faire un BinarySearch qui serait beaucoup plus rapide, mais encore plus lent que d'une recherche dans un clé/valeur en fonction de la collection.
J'ai supposé que le tri il serait plus rapide de la recherche par le biais de la recherche à travers au hasard dans les cordes, surtout si c'est au début de la liste. Ce n'était qu'une suggestion et en aucun cas la seule solution.
OriginalL'auteur Jamie Keeling