web-dev-qa-db-fra.com

Tableau de longueur inconnue en C #

Je viens de commencer à apprendre le C # et dans l’introduction aux tableaux, ils ont montré comment établir une variable sous forme de tableau, mais il semble qu’il faille spécifier la longueur du tableau lors de l’affectation tableau?

72
UnkwnTech

Les tableaux doivent avoir une longueur. Pour permettre un nombre quelconque d'éléments, utilisez la classe List .

Par exemple:

List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
101
Samuel

Utilisez List<> pour construire un 'tableau' de longueur inconnue.

Utilisez List<>.ToArray() pour renvoyer un tableau réel et non une List.

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
35
TFD

Vous pouvez créer un tableau dont la taille est définie sur une variable, c.-à-d.

int size = 50;
string[] words = new string[size]; // contains 50 strings

Cependant, cette taille ne peut pas changer plus tard si vous décidez que vous avez besoin de 100 mots. Si vous souhaitez que la taille soit vraiment dynamique, vous devrez utiliser un type de structure de données différent. Essayez List .

14
mquander

Quelques informations de base:

Comme dit, si vous voulez avoir une collection dynamique de choses, utilisez un List<T>. En interne, une liste utilise également un tableau pour le stockage. Ce tableau a une taille fixe, comme tout autre tableau. Une fois qu'un tableau est déclaré comme ayant une taille, il ne change pas. Lorsque vous ajoutez un élément à une List, il est ajouté au tableau. Initialement, la List commence avec un tableau qui, je crois, a une longueur de 16. Lorsque vous essayez d’ajouter le 17e élément à la List, il se produit qu’un nouveau tableau est alloué, soit (je pense) deux fois la taille du ancien, donc 32 articles. Ensuite, le contenu de l'ancien tableau est copié dans le nouveau tableau. Ainsi, bien qu'une List puisse paraître dynamique pour l'observateur extérieur, elle doit également respecter les règles en interne. 

Et comme vous l'avez peut-être deviné, la copie et l'allocation des tableaux ne sont pas gratuites; vous devez donc viser à en avoir le moins possible. Pour ce faire, vous pouvez spécifier (dans le constructeur de List) la taille initiale du tableau. , qui dans un scénario parfait est juste assez grand pour contenir tout ce que vous voulez. Cependant, il s’agit d’une micro-optimisation et il est peu probable que cela compte pour vous, mais il est toujours agréable de savoir ce que vous êtes. réellement Faire. 

12
JulianR

Utilisez ArrayList si .NET 1.x ou List<yourtype> si .NET 2.0 ou 3.x.

Recherchez-les dans System.Collections et System.Collections.Generics.

3
Diego Jancic

Vous pouvez également consulter les dictionnaires si vos données sont uniques. Cela vous donnera deux colonnes avec lesquelles travailler.

Nom d'utilisateur, facture totale

il vous donne de nombreux outils intégrés pour rechercher et mettre à jour uniquement la valeur.

2
Crash893

En un mot, veuillez utiliser Collections et génériques.

C’est un must pour tout développeur C #, cela vaut la peine d’apprendre :)

1
Novice
var yummy = new List<string>();
while(person.FeelsHappy()) {
    yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
    "until I finished making it!");
1
yfeldblum

essayez une liste générique au lieu d'un tableau

1
Hannoun Yassir

Comme indiqué ci-dessus, la liste générique <> est le meilleur moyen de le faire.

Si vous êtes bloqué dans .NET 1. *, vous devrez alors utiliser la classe ArrayList. Cela ne nécessite pas de vérification de type à la compilation et vous devez également ajouter casting - messy.

Les versions successives ont également implémenté diverses variantes, y compris des variantes thread-safe.

1
winwaed

Si vous devez vraiment utiliser un tableau au lieu d'une liste, vous pouvez créer un tableau dont la taille est calculée au moment de l'exécution,.

par exemple, je veux un tableau à deux dimensions de taille n sur n. n sera obtenu au moment de l'exécution par l'utilisateur

int n = 0;
bool isInteger = int.TryPase(Console.ReadLine(), out n);
var x = new int[n,n];
0
Ken Janka