Я создаю новый список С# (List<double>
). Есть ли способ, кроме как сделать цикл над списком, инициализировать все начальные значения до 0?
Автоинициализация списков С#
Ответ 1
В дополнение к предоставленным функциональным решениям (используя статические методы в классе Enumerable
), вы можете передать массив double
в конструкторе.
var tenDoubles = new List<double>(new double[10]);
Это работает, потому что значение по умолчанию для double
уже равно 0 и, вероятно, работает немного лучше.
Ответ 2
Вы можете использовать инициализатор:
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()};
Итак, вы можете использовать это:
var listInt = new List<double> {0.0, 0.0, 0.0, 0.0};
В противном случае, используя конструктор по умолчанию, List будет пустым.
Ответ 3
Используйте этот код:
Enumerable.Repeat(0d, 25).ToList();
new List<double>(new double[25]); //Array elements default to 0
Ответ 4
Одна из возможностей заключается в использовании Enumerable.Range
:
int capacity;
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList();
Другим является:
int capacity;
var list = new List<double>(new double[capacity]);
Ответ 5
Немного поздно, но, возможно, еще интересно: Используя LINQ, попробуйте
var initializedList = new double[10].ToList()
... мы надеемся избежать копирования списка (теперь до LINQ).
Это должен быть комментарий Майкла Мидоуза, но мне не хватает репутации.
Ответ 6
Для более сложных типов:
List<Customer> listOfCustomers =
new List<Customer> {
{ Id = 1, Name="Dave", City="Sarasota" },
{ Id = 2, Name="John", City="Tampa" },
{ Id = 3, Name="Abe", City="Miami" }
};
отсюда: Блог Дэвида Хайдена