2010-11-23 8 views
2

Je prévois de concevoir une structure de données comprenant des éléments de ce type,Question sur la conception de la structure de données

{1, 13, 15, 113, 117, 145} 
{2, 23, 27} 
{5, 53, 55, 511, 519} 
{9, 11} 

J'ai deux idées jusqu'à présent.

1er. Construire un dictionnaire (clé, valeur);

When Key = 1, Value = ArrayList(13, 15, 113, 117, 145) 
When Key = 2, Value = ArrayList(23, 27) 
When Key = 5, Value = ArrayList(53, 55, 511, 519) 
When Key = 9, Value = ArrayList(11) 

2ème. Construire un ArrayList (SubArrayLists)

subArrayList1 {1, 13, 15, 113, 117, 145} 
subArrayList2 {2, 23, 27} 
subArrayList3 {5, 53, 55, 511, 519} 
subArrayList4 {9, 11} 

Je prévois d'accéder à l'élément lors de l'exécution. Quelle est la meilleure solution?

Merci pour vos commentaires.

[Mise à jour ]
1. Les int numéros énumérés ci-dessus peuvent représenter certains objets. comme objet dictionnaire, etc.
2. Toutes les données seront chargées dans la mémoire après le lancement de l'application. Alors lisez seulement autorisé. Pas besoin d'écrire/ajouter/supprimer etc.

+2

'ArrayList' est obsolète, même dans .NET 2.0 (je suppose que c'est ce que votre compilateur C# 2.0 vise?). Les questions importantes ici sont: comment cette structure de données va-t-elle être interrogée, et comment sera-t-elle mutée après l'initialisation, voire pas du tout? – Ani

+1

une raison quelconque que vous ne voulez pas utiliser 'List ' au lieu de 'ArrayList'? –

+1

vous devez fournir plus d'informations que cela, que comptez-vous faire avec cela? un dictionnaire est bon si vous allez chercher des choses par clé, mais si vous allez simplement parcourir la liste, alors c'est un gâchis ... – Tom

Répondre

2

Cela dépend de ce qui est le plus important pour vous, des vitesses de lecture plus rapides ou des écritures plus rapides? Un dictionnaire donnera un accès très rapide aux valeurs stockées mais en même temps, l'ajout de valeurs au dictionnaire prendra plus de temps.

Si vous avez beaucoup de valeurs qui doivent être accessibles à plusieurs reprises, puis le dictionnaire est le chemin à parcourir, si vous vous trouvez en boucle à travers une liste de valeurs dans un autre, par exemple en boucle:

foreach(var item in ListA) 
{ 
    foreach(var item in ListB) 
    { 
    // Match against all values in list B   

    } 
} 

Dans l'exemple ci-dessus, il vaudra mieux que la liste B soit un dictionnaire au lieu d'une liste puisque vous parcourez la liste à chaque itération de ListA. Au fur et à mesure que le nombre d'éléments dans ListB augmente, le temps d'exécution du code ci-dessus augmente, mais si c'est un dictionnaire, cela ne fera pas beaucoup de différence.

2

Si vous allez faire un accès aléatoire, alors Dictionary sera une bonne option. Mais gardez à l'esprit que vous devez avoir des clés uniques (puisque vous allez le premier élément de chaque liste car le premier élément clé de chaque liste doit être unique)

Si vous allez accéder séquentiellement aux éléments de la structure de données ArrayList est meilleur

Questions connexes