2011-07-17 2 views
8

Je veux créer un tableau à deux dimensions, sans connaître la taille de la première dimension.Comment créer un tableau de longueur dynamique bidimensionnel?

Par exemple, j'ai un nombre inconnu de lignes lorsque je crée un tableau. Chaque ligne représente un compte. sortie 4 colonnes pour chaque ligne: ID, nom, utilisateur, mot de passe

J'ai essayé avec tableau en dents de scie, mais il est impossible d'avoir:

int[][] jaggedArray = new int[][3]; 

Je aussi cherché ArrayList, la mise en œuvre avec clases et un peu sur les génériques.

Je cherche une solution qui peut permettre une manipulation aisée des données comme:

  • Ajouter à la liste, sélectionnez, des éléments d'entrée
  • utilisant des éléments dans la base de données interroge
  • utilisant comme paramètres dans d'autres fonctions

Parce que je suis un débutant dans .NET (C#) s'il vous plaît me fournir des solutions de code, au lieu de générique (chercher) solutions

Répondre

2

Il n'existe pas de tableaux de longueur dynamique dans .NET. Utilisez un List<> à la place.

Les limites de tableau doivent toutes être connues lorsque vous instanciez un tableau. Ce qui peut vous avoir désorienté est que cela semble être différent pour les tableaux dentelés, mais ce n'est pas le cas: puisque c'est un tableau de tableaux, lorsque vous l'instanciez, ce sera un tableau de tableaux non instanciés (par exemple null références). Vous devez ensuite attribuer à nouveau chacun de ces tableaux pour les utiliser.

17

OMI, étant donné que les "colonnes" sont fixes, déclarer une classe pour que:

public class Account 
{ 
    public int ID {get;set;} 
    public string Name {get;set;} 
    public string User {get;set;} 
    public string Password {get;set;} // you meant salted hash, right? ;p 
} 

ont maintenant:

List<Account> list = new List<Account>(); 

cela a tout ce dont vous avez besoin:

ajouter à la liste, sélectionner, entrer des éléments

list.Add etc

utilisant des éléments dans la base de données requêtes utilisant comme paramètres dans d'autres fonctions

vague sans plus d'info, mais vous pouvez passer soit les valeurs Account ou, ou strictement lié la liste complète.

+0

merci. J'ai une autre question: Comment puis-je récupérer les valeurs des membres de classe pour un élément de liste spécifique? – user848568

+2

@user vous voulez dire 'list [0] .Name'? –

+0

Mon cas a une différence mineure. Les lignes et les colonnes ne sont pas connues. Comment puis-je obtenir le même résultat pour '2-D Arrays'? – barnes

0

Tant que je sais, nous ne pouvons pas instancier un tableau sans connaître sa taille. Pourquoi ne pas essayer un tableau de liste? Comme ceci:

List<int>[] a = new List<int>[yourDesireColumnNumber]; 

Avec List, ajouter, sélectionner, les éléments d'entrée sont triviaux. Si vous voulez le donner en paramètre dans d'autres fonctions, il suffit de définir Type.

+0

Ne voulez-vous pas dire une liste de tableaux int fixes, pas un tableau fixe de liste de int? –

+3

@Scrum est juste - si vous avez choisi cette approche (et je ne voudrais pas; p) ce serait un 'Liste ', pas un 'Liste []' –

+0

Vous devriez l'essayer avant de le juger. C'est un tableau de liste . D'ailleurs, l'approche de Marc est géniale. ;) J'apprends de cela. –

Questions connexes