68 votes

Remplir la liste<int> avec des valeurs par défaut?

Duplicata possible: Listes C # à initialisation automatique

J'ai une liste d'entiers qui a une certaine capacité que je voudrais remplir automatiquement une fois déclarée.

 List<int> x = new List<int>(10);

Existe-t-il un moyen plus simple de remplir cette liste avec 10 entiers qui ont la valeur par défaut pour un int plutôt que de boucler et d'ajouter les éléments?

149voto

Jon Skeet Points 692016

Eh bien, vous pouvez demander à LINQ de faire le bouclage pour vous:

 List<int> x = Enumerable.Repeat(value, count).ToList();

On ne sait pas si par "valeur par défaut" vous entendez 0 ou une valeur par défaut personnalisée.

Vous pouvez rendre cela légèrement plus efficace (en temps d'exécution; c'est pire en mémoire) en créant un tableau:

 List<int> x = new List<int>(new int[count]);

Cela fera une copie en bloc du tableau dans la liste, ce qui sera probablement plus efficace que le bouclage requis par ToList .

13voto

Tim Robinson Points 28696
int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();

11voto

luke Points 6688

si vous avez une liste de longueur fixe et que vous voulez que tous les éléments aient la valeur par défaut, vous devriez peut-être simplement utiliser un tableau:

 int[] x  = new int[10];

Sinon, cela peut être un bon endroit pour une méthode d'extension personnalisée:

 public static void Fill<T>(this ICollection<T> lst, int num)
{
    Fill(lst, default(T), num);
}

public static void Fill<T>(this ICollection<T> lst, T val, int num)
{
    lst.Clear();
    for(int i = 0; i < num; i++)
        lst.Add(val);
}

et vous pouvez même ajouter une surcharge spéciale pour que la classe List se remplisse jusqu'à la capacité:

 public static void Fill<T>(this List<T> lst, T val)
{
    Fill(lst, val, lst.Capacity);
}
public static void Fill<T>(this List<T> lst)
{
    Fill(lst, default(T), lst.Capacity);
}

Ensuite, vous pouvez simplement dire:

 List<int> x  = new List(10).Fill();

6voto

Itay Karo Points 10446

Oui

 int[] arr = new int[10];
List<int> list = new List<int>(arr);

2voto

Eugene Cheverda Points 4565
var count = 10;
var list = new List<int>(new int[count]);

AJOUTER

Voici une méthode générique pour obtenir la liste avec les valeurs par défaut:

     public static List<T> GetListFilledWithDefaulValues<T>(int count)
    {
        if (count < 0)
            throw new ArgumentException("Count of elements cannot be less than zero", "count");

        return new List<T>(new T[count]);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X