2011-09-02 1 views
4

J'ai besoin d'utiliser un dictionnaire dans le projet, mais comme nous savons qu'ils sont uniquement accessibles en utilisant les clés et ne pas utiliser les index, et je veux accéder aux éléments du dictionnaire en utilisant des index. Donc je bidouille sur le web et découvre OrderedDictionary car ils sont accessibles en utilisant les index et les clés mais ils ont quelques performance issue et comme je suis en train de lire/écrire le dictionnaire chaque minute du jour, ce n'est pas une bonne idée d'utiliser OrderedDictionary. Donc, ma question ici est qu'il existe une alternative disponible qui me donne la fonctionnalité du dictionnaire et je peux aussi y accéder en utilisant des index et ne pose pas de problème de performance.Existe-t-il une alternative de Dictionary dans .NET?

+12

Vous savez que vous pouvez appeler ElementAt (index) sur le dictionnaire? – Dominik

+8

En quoi lire/écrire chaque minute dans le dictionnaire est-il un problème de performance? – tzup

+1

Voulez-vous y accéder par index ou simplement parcourir tous les éléments? Sinon, vous pouvez utiliser la propriété [Values] (http://msdn.microsoft.com/en-us/library/ekcfxy3x.aspx). – riezebosch

Répondre

3

en réponse à vos commentaires que vous n'attendez une centaine de mises à jour chaque minute, ce qui est très peu de travail - pratiquement rien. Vous pouvez toujours utiliser un OrderedDictionary, la performance ne sera pas un problème pour vous.

+0

Je suis d'accord avec votre réponse que 100 éléments est pratiquement rien ... mais 100 items inlcude inscription, login, erreur, pagevisits etc compte qui peut être n'importe quel nombre de lire et écrire dans le dictionnaire. .. et je ne prétendais pas que OrderedDictionary causerait un problème de performance ... Je l'ai écrit dans ma question mais j'ai aussi mentionné le post où je l'ai lu ... J'espère que je clarifierai mes préoccupations –

6

SortedList<TKey, TValue> a une propriété, Values, c'est-à-dire IList<TValue>. Est-ce suffisant? C'est rapide seulement pour les petits "ensembles" d'éléments. La différence avec SortedDictionary est ici http://msdn.microsoft.com/en-us/library/5z658b67(v=vs.80).aspx

Puis-je vous demander pourquoi vous voulez y accéder "par index"? Vous pouvez toujours l'énumérer avec foreach, vous savez?

+0

Je veux supprimer le premier élément du dictionnaire après l'avoir enregistré dans une base de données ... –

+1

L'index n'est pas "stable". Si vous insérez B, puis insérez A, l'index de A sera 0, l'index de B sera 1. La seule collection qui maintient l'ordre d'insertion est 'OrderedDictionary' (http://stackoverflow.com/questions/2722767/c -order-preserving-data-structures) – xanatos

Questions connexes