Je recherche des ressources qui peuvent m'aider à déterminer l'approche à utiliser pour créer une structure de données 2d avec C#.
Réponses
Trop de publicités?@Traumapony-- En fait, je dirais que le gain de performance réel est réalisé dans un tableau plat géant, mais c'est peut-être juste mes racines de traitement d'image C++ qui le montrent.
Cela dépend de ce que vous avez besoin de faire avec la structure 2D. S'il s'agit de stocker quelque chose où chaque ensemble d'éléments dans la deuxième dimension est de la même taille, alors vous voulez utiliser quelque chose comme un grand tableau 1D, parce que les temps de recherche sont plus rapides et la gestion des données est plus facile. Par exemple :
for (y = 0; y < ysize; y++){
for (x = 0; x < xsize; x++){
theArray[y*xsize + x] = //some stuff!
}
}
Vous pouvez alors effectuer des opérations qui ignorent les pixels voisins avec un seul passage :
totalsize = xsize*ysize;
for (x = 0; x < totalsize; x++){
theArray[x] = //some stuff!
}
Sauf qu'en C#, vous voudrez probablement appeler une bibliothèque C++ pour effectuer ce type de traitement ; le C++ a tendance à être plus rapide pour cela, surtout si vous utilisez le compilateur intel.
Si vous avez la deuxième dimension, c'est-à-dire plusieurs tailles différentes, alors rien de ce que j'ai dit ne s'applique, et vous devriez examiner d'autres solutions. Vous devez vraiment savoir quels sont vos besoins fonctionnels pour pouvoir répondre à la question.
En fonction du type de données, vous pouvez envisager d'utiliser un tableau à deux dimensions :
int[][] intGrid;
Si vous avez besoin d'être délicat, vous pouvez toujours adopter l'approche générique :
Dictionary<KeyValuePair<int,int>,string>;
Cela permet de placer des types complexes dans la partie valeur du dictionnaire, mais rend l'indexation dans les éléments plus difficile.
Si vous cherchez à stocker des données ponctuelles spatiales 2d, System.Drawing prend en charge un grand nombre de points dans l'espace 2d.
Sérieusement, je n'essaie pas de critiquer la question, mais j'ai obtenu des tonnes de résultats utiles en haut de ma recherche quand j'ai cherché sur Google :
data structures c#
Si vous avez des questions spécifiques sur des structures de données spécifiques, nous avons peut-être des réponses plus spécifiques...
Pour des raisons de performances, il est préférable de ne pas utiliser de tableaux multidimensionnels ([,]), mais plutôt des tableaux en dents de scie, 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>];