Выделение памяти List C#

439
02 января 2017, 21:09

Краткий, может быть глупый вопрос: как при создании List<тип> выделить сразу память под n Элементов? Конструктор позволяет задать только примерную емкость, но без выделения.

Если так сделать нельзя, то как тогда? Я хочу за 1 строку выделить память под n элементов, используя скажем addRange(INumerable...).

Что то слышал, про однострочники с использованием лямбда выражений, они как-то могут тут помочь или же их используют только при сортировке/выборе элементов? Подскажите пожалуйста. Не пинайте) , хотя нет, лучше пинайте:)

P.S еще мне требуется выделить память под List< List< Тип > > , если также можно, то напишите)

Answer 1

В конструкторе вы задаёте точную ёмкость: количество элементов, такое, что увеличение размера списка до этого количества не вызывает повторной аллокации, и поэтому быстрое. Вам по идее не должно хотеться создать список с значениями по умолчанию, это скорее всего лишено смысла.

Но если очень хочется, можно

  • так: new T[n].ToList()
  • или так:

    List<T> list = new List<T>(n);
    list.AddRange(Enumerable.Repeat(default(T), n));
    
  • или так: Enumerable.Repeat(default(T), n).ToList() (вариант @VadimOvchinnikov из комментариев)

READ ALSO
Generic или не Generic

Generic или не Generic

В обсуждении моего ответа на вопрос возник один спорный момент

362
Запрос на сервер и выборка файла из базы

Запрос на сервер и выборка файла из базы

Привет изучаю сокеты на c# и для практики есть такая идеяЕсть два простеньких приложения сервер и клиент

372
Как сделать перемещение нод TreeView?

Как сделать перемещение нод TreeView?

Ветки нужно перемещать ноды на уровень выше в материнские и ниже в дочерние

395
Аргументы объекта

Аргументы объекта

Каким образом я могу вывести на экран аргументы моих объектов в методе cout?

460