189 votes

Différence entre Lookup() et Dictionary (Of list())

Je suis en train d’envelopper la tête autour de laquelle les données, les structures sont les plus efficaces et quand / où d’utiliser ceux qui.

Maintenant, il est possible que j’ai tout simplement ne comprennent pas les structures assez bien, mais comment est un différent d’un ?

Aussi où je voudrait utiliser un `` et où il serait plus efficace en termes de vitesse de programme / mémoire / données pour accéder aux, etc. ?

286voto

Jon Skeet Points 692016

Deux différences significatives:

  • Lookup est immuable. Youpi :) (Au moins, je crois que le béton Lookup classe est immuable, et l' ILookup interface n'est pas la mutation de membres. Il y a peut être d'autres mutable implémentations, bien sûr.)
  • Quand vous recherche une clé qui n'est pas présent dans une recherche, vous obtenez une séquence vide en arrière au lieu d'un KeyNotFoundException. (Donc il n'y a pas d' TryGetValue, AFAICR.)

Ils sont susceptibles d'être l'équivalent de l'efficacité - la recherche peut également utiliser un Dictionary<TKey, GroupingImplementation<TValue>> derrière les coulisses, par exemple. Choisir entre eux, en fonction de vos besoins. Personnellement, je trouve que la recherche est généralement un meilleur ajustement que un Dictionary<TKey, List<TValue>>, en raison principalement les deux premiers points ci-dessus.

Notez que comme un détail d'implémentation, la mise en œuvre concrète de l' IGrouping<,> qui est utilisé pour les valeurs implémente IList<TValue>, ce qui signifie qu'il est efficace à utiliser avec Count(), ElementAt() etc.

66voto

Mladen Mihajlovic Points 2476

Intéressant que personne n’a déclaré la plus grande différence réelle (tiré directement à partir de MSDN) :

Une recherche ressemble à un dictionnaire. La différence est qu’un dictionnaire mappe les clés à des valeurs uniques, alors qu’une recherche mappe les clés à des collections de valeurs.

35voto

James Michael Hare Points 19077

À la fois un Dictionary<Key, List<Value>> et Lookup<Key, Value> logiquement peut contenir des données organisées de manière similaire, les deux sont du même ordre d'efficacité. La principale différence est un Lookup est immuable: il n'a pas d' Add() méthodes et pas de constructeur public (et que Jon dit que vous pouvez interroger inexistante de clé sans exception et ont la clé dans le cadre du groupement).

Qu'est-ce que vous utilisez, cela dépend vraiment de la façon dont vous souhaitez les utiliser. Si vous utilisez une carte de clé pour plusieurs valeurs qui sont constamment modifiées, puis un Dictionary<Key, List<Value>> est probablement mieux depuis qu'il est mutable.

Si, toutefois, vous avez une séquence de données et vous voulez juste une vue en lecture seule des données organisée par la clé, puis une recherche est très facile à construire et qui vous donne un instantané en lecture seule.

11voto

Servy Points 93720

La principale différence entre un et un qui est un dictionnaire est mutable ; vous pouvez ajouter ou supprimer des clés et également ajouter ou supprimer des éléments dans la liste qui est recherchée. Un `` est immuable et ne peut être modifié une fois créé.

L’implémentation sous-jacente de ces deux mécanismes seront équivalentes ou similaires, si leur empreinte la recherche de vitesse et de la mémoire sera la même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X