web-dev-qa-db-fra.com

Listes C # à initialisation automatique

Je crée une nouvelle liste C # (List<double>). Existe-t-il un moyen, autre que de faire une boucle sur la liste, d'initialiser toutes les valeurs de départ à 0?

47
JasCav

En plus des solutions fonctionnelles fournies (en utilisant les méthodes statiques de la classe Enumerable), vous pouvez passer un tableau de doubles dans le constructeur.

var tenDoubles = new List<double>(new double[10]);

Cela fonctionne car la valeur par défaut d'un double est déjà 0 et fonctionne probablement légèrement mieux.

57
Michael Meadows

Vous pouvez utiliser l'initialiseur:

var listInt = new List<int> {4, 5, 6, 7};
var listString = new List<string> {"string1", "hello", "world"};
var listCustomObjects = new List<Animal> {new Cat(), new Dog(), new Horse()};

Vous pourriez donc utiliser ceci:

var listInt = new List<double> {0.0, 0.0, 0.0, 0.0};

Sinon, en utilisant le constructeur par défaut, la liste sera vide.

Utilisez ce code:

Enumerable.Repeat(0d, 25).ToList();
new List<double>(new double[25]);     //Array elements default to 0
37
SLaks

Une possibilité consiste à utiliser Enumerable.Range :

int capacity;
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList();

Un autre est:

int capacity;
var list = new List<double>(new double[capacity]);
18
jason

Un peu en retard, mais peut-être toujours intéressant: en utilisant LINQ, essayez

var initializedList = new double[10].ToList()

... j'espère éviter de copier la liste (c'est à LINQ maintenant).

Cela devrait être un commentaire à la réponse de Michael Meadows, mais je manque de réputation.

2
Daniel