Заполнить список <int> со значениями по умолчанию?
Возможный дубликат:
Автоинициализация списков С#
У меня есть список целых чисел, которые имеют определенную емкость, которую я хотел бы автоматически заполнить при объявлении.
List<int> x = new List<int>(10);
Есть ли более простой способ заполнить этот список с помощью 10 int, которые имеют значение по умолчанию для int, а не зацикливание и добавление элементов?
Ответы
Ответ 1
Ну, вы можете попросить LINQ сделать цикл для вас:
List<int> x = Enumerable.Repeat(value, count).ToList();
Неясно, имеет ли значение по умолчанию значение 0 или пользовательское значение по умолчанию.
Вы можете сделать это немного более эффективным (во время выполнения, что хуже в памяти), создав массив:
List<int> x = new List<int>(new int[count]);
Это сделает копию блока из массива в список, который, вероятно, будет более эффективным, чем цикл, требуемый ToList
.
Ответ 2
int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();
Ответ 3
если у вас есть список фиксированной длины, и вы хотите, чтобы все элементы имели значение по умолчанию, то, возможно, вам следует просто использовать массив:
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();
Ответ 4
Да
int[] arr = new int[10];
List<int> list = new List<int>(arr);
Ответ 5
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]);
}