2008-09-25 9 views
1

Je cherche des ressources qui peuvent m'aider à déterminer quelle approche utiliser pour créer une structure de données 2D avec C#.2d Structure de données en C#

+0

Comme un tableau, une liste ou un dictionnaire? –

+0

peut-être vous pouvez élaborer sur ce que vous voulez faire et utiliser des structures de données 2D pour, afin que d'autres puissent donner des réponses plus pertinentes et significatives? – cruizer

Répondre

3

Voulez-vous dire tableau multidimensionnel? Il est simple:

<type>[,] <name> = new <type>[<first dimenison>,<second dimension>]; 

Voici référence MSDN:

Multidimensional Arrays (C#)

0

Data Structures in C#

Sérieusement, je ne suis pas en train de critiquer la question, mais je suis arrivé tonnes de résultats utiles en haut de ma recherche lorsque j'ai recherché sur Google:

data structures c# 

Si vous avez des questions spécifiques sur des structures de données spécifiques, nous pourrions avoir des réponses plus spécifiques ...

+0

Oh, si ce n'était que des tableaux 2D, ne vous occupez pas de ma diatribe :-) – CMPalmer

0

Pour les performances, il est préférable de ne pas utiliser de tableaux multidimensionnels ([,]); à la place, utilisez des tableaux dentelés. par exemple:

<type>[][] <name> = new <type>[<first dimension>]; 
for (int i = 0; i < <first dimension>; i++) 
{ 
    <name>[i] = new <type>[<second dimension>]; 
} 

Pour y accéder:

<type> item = <name>[<first index>][<second index>]; 
+0

Pour les performances, il est préférable d'utiliser un tableau unidimensionnel et d'y accéder en utilisant des offsets. ; P –

2

@ Traumapony-- je fait affirmer que le gain de performance réel est fait dans un réseau plat géant, mais peut-être juste mon C++ traitement d'image racines montrant.

Cela dépend de ce que vous avez besoin de la structure 2D à faire. Si vous stockez quelque chose où chaque ensemble d'éléments de la deuxième dimension a la même taille, vous voulez utiliser quelque chose comme un grand tableau 1D, car les temps de recherche sont plus rapides et la gestion des données plus facile. Comme:

for (y = 0; y < ysize; y++){ 
    for (x = 0; x < xsize; x++){ 
     theArray[y*xsize + x] = //some stuff! 
    } 
} 

Et vous pouvez faire des opérations qui ne tiennent pas compte des pixels voisins avec un seul passthrough:

totalsize = xsize*ysize; 
for (x = 0; x < totalsize; x++){ 
    theArray[x] = //some stuff! 
} 

Sauf que dans C# vous voulez probablement appeler réellement une bibliothèque C++ pour faire ce genre de traitement ; C++ a tendance à être plus rapide pour cela, surtout si vous utilisez le compilateur Intel.

Si vous avez la deuxième dimension ayant plusieurs tailles différentes, rien de ce que j'ai dit ne s'applique, et vous devriez regarder certaines des autres solutions. Vous avez vraiment besoin de savoir quelles sont vos exigences fonctionnelles afin de pouvoir répondre à la question.

+0

Eh bien, oui, c'est vrai, mais techniquement ce n'est pas 2D: P – TraumaPony

1

En fonction du type de données, vous pouvez envisager d'utiliser un tableau à 2 dimensions droite:

int[][] intGrid; 

Si vous avez besoin de se compliquer, vous pouvez toujours aller l'approche des génériques:

Dictionary<KeyValuePair<int,int>,string>; 

Cela vous permet de placer des types complexes dans la partie valeur du dictionnaire, bien que cela rende l'indexation dans les éléments plus difficile.

Si vous cherchez à stocker des données 2D spatiales, System.Drawing a beaucoup de soutien pour les points dans l'espace 2D.

Questions connexes