Список заливки <интервал> со значениями по умолчанию? [дубликат]

Возможный дубликат:
Автоинициализация списков C#

У меня есть список целых чисел, который имеет определенную способность, которую я хотел бы автоматически заполнить при объявлении.

List x = new List(10);

Существует ли более легкий способ заполнить этот список 10 ints, которые имеют значение по умолчанию для интервала, а не цикличного выполнения через и добавления объектов?

53
задан Community 23 May 2017 в 02:34
поделиться

5 ответов

Ну, вы можете попросить LINQ сделать цикл за вас:

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

Неясно, подразумеваете ли вы под "значением по умолчанию" 0 или пользовательское значение по умолчанию.

Вы можете сделать это немного более эффективным (по времени выполнения; в памяти это хуже), создав массив:

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

Это сделает блочное копирование из массива в список, что, вероятно, будет более эффективно, чем циклическое выполнение, требуемое ToList.

122
ответ дан 7 November 2019 в 08:23
поделиться
int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();
10
ответ дан 7 November 2019 в 08:23
поделиться

Да

int[] arr = new int[10];
List<int> list = new List<int>(arr);
2
ответ дан 7 November 2019 в 08:23
поделиться

Если у вас есть список фиксированной длины и вы хотите, чтобы все элементы имели значение по умолчанию, то, возможно, вам следует просто использовать массив:

int[] x  = new int[10];

В качестве альтернативы это может быть хорошим местом для пользовательского метода расширения:

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);
}

и тогда вы можете даже добавить специальную перегрузку для класса List, чтобы заполнить его до отказа:

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);
}

Тогда вы можете просто сказать:

List<int> x  = new List(10).Fill();
7
ответ дан 7 November 2019 в 08:23
поделиться
var count = 10;
var list = new List<int>(new int[count]);

ADD

Вот общий метод для получения списка со значениями по умолчанию:

    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]);
    }
1
ответ дан 7 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: