est la mise en œuvre dans hashset.Elementat code> O (1) et sinon, qu'est-ce que c'est? P>
3 Réponses :
Non, c'est o (n). Toutes les méthodes d'extension sur pour ienumerable
ienumerable
EMMETAT CODE> tenteront de lancer vers
ilist
hashset
ilist
hashset
Ensuite, une chose plus intelligente serait de faire un toarray code> si vous devez utiliser Elementat sur beaucoup de lignes? N'est-il jamais possible d'obtenir la commande "correcte" avec un hachette?
Oui, un seul toarray code> puis plusieurs "éléments à" (via le
[] code> opérateur) serait beaucoup plus rapide. Il n'y a pas d'ordre "correct" avec un hashset, car les éléments ne sont pas commandés de manière significative.
Bien, cependant, quand je le fais: {2, 3, 4} et initiez deux hashsets avec ceux-ci, je reçois la commande correcte lors de la marche à travers chaque élément.
@Dean: N'oubliez pas les optimisations de performance à l'intérieur du énumérable code> Classe pour tableau et liste
@FILIP: La commande n'est pas aléatoire. La commande sera exactement la même pour ces deux cas, toujours. Cependant, aucune garantie ne garantit que les éléments sont stockés dans le même ordre que vous leur fournissez. Je m'attends à ce que les résultats de votre expérience soient accidentellement dans cet ordre. En outre, la commande peut changer de version à la version.
@Filip: Ce que vous voyez est une coïncidence. Deux ensembles avec le contenu même i> auront la commande même i>, mais si vous ajoutez des éléments supplémentaires à l'ensemble, vous constaterez probablement que la commande change, puisque les godets Hashtable se déplacera lorsque l'ensemble grandit.
@Steven, je vois. Y a-t-il d'autres ensembles qui sont rapides et fournis chevauchements code>?
@Dean: Ouvrir le réflecteur et regardez le ellementat code>,
où code> et
dernier code> par exemple. C'est bien de voir ce qu'ils font. Bien sûr, ces optimisations viennent à un coût pour les petites collections.
Le premier paragraphe de cette réponse est tout simplement faux. Beaucoup de méthodes d'extension IEnumerables
@WILL: C'est exactement ce que nous discutons ici dans les commentaires ;-)
@Filip: Qu'entendez-vous par «chevauchement»?
@Steven, juste remarqué intersects code> Cependant, je veux savoir s'il intersecte avec exactement le même ordre.
Il n'y a pas de Le Méthode code> Méthode dans
hashset code> Vous souhaitez probablement connaître les performances de la méthode code> énumérable. / code> méthode lorsqu'il est utilisé sur une instance de
hashset
énumérable.Elemente code> est une optimisation pour les types implémentant
ilist
@Steven, il y a un élémenat Becuase Hashset dérive de l'Icollection.
@Filip: hashset
icollection
icollection
Elementat < / code> méthode.
hashset
EMMETAT code> méthode.
@Steven, j'utilise .net 4.0 et Resharbeur me suggère d'utiliser icollection
hashset
toarray code> des choses rapidement accélérées beaucoup.
@FILIP: Je ne connais pas très bien .net 4.0 Mais je suis absolument sûr que Microsoft n'ajout d'aucune méthode à Icollection
Icollection code> car tous les appels de méthode que vous vous trouvez sont basés sur cette interface ou sur des méthodes d'extension sur cette interface ou des interfaces de base (
ienumerable
@Filip: Peut-être que cette discussion n'est peut-être pas très utile pour vous. Vous ne vous souciez probablement pas d'où il est défini. Vous l'appelez, il compile, cela fonctionne :-). N'oubliez pas que vous appelez une méthode d'extension.
Cela dépend du type de liste de sous-cycle. Le réflecteur montre que Un fournisseur de requêtes par exemple peut renvoyer quelque chose qui est un EDIT: Je suralise le énumérable
ilist
ilist
iEnumerable
hashset code>. Un
hashset
ilist