Вставьте int в пустой список <int>с указанным индексом c - PullRequest
1 голос
/ 13 февраля 2020

Я понял, что если мой список пуст, я не могу вставить что-то в 3-й индекс, так как это приведет к ошибке выхода за границы.

List<int> list = new List<int>();
list.Insert(3, 1000); //System.ArgumentOutOfRangeException

Мне нужно заполнить первый и второй элементы нулем, чтобы я мог вставить что-то в 3-й указатель. Это кажется ненужным. Но если это был массив, я могу вставить что-нибудь в любой индекс, который мне нужен, даже если предыдущие индексы не назначены.

int[] arr = new int[100];
arr[3] = 1000; //no error

Можно ли каким-либо образом вставить пустой список с указанием c индекс без дополнения предыдущего индекса? Или есть другая лучшая коллекция?

Ответы [ 2 ]

6 голосов
/ 13 февраля 2020

Другой тип коллекции

Или есть другая лучшая коллекция?

Вы можете использовать Словарь . Пример использования:

using System.Collections.Generic;

...

var items = new Dictionary<int, int>();
items.Add(3, 1000); // will throw error if 3 already exists

// Or update 
items[3] = 1000: // will not throw error if already exists or doesn't exist!

Обратите внимание, что порядок словаря не гарантируется. Из документов

Порядок, в котором возвращаются товары, не определен.

Если вам нужна гарантия заказа, вы можете использовать SortedList или SortedDictionary .

using System.Collections.Generic;

...

var items = new SortedList<int, int>();
items.Add(3, 1000); // will throw error if 3 already exists

// Or update 
items[3] = 1000: // will not throw error if already exists or doesn't exist!
using System.Collections.Generic;

...

var items = new SortedDictionary<int, int>();
items.Add(3, 1000); // will throw error if 3 already exists

// Or update 
items[3] = 1000: // will not throw error if already exists or doesn't exist!

Разница между SortedList и SortedDictionary заключается в производительности. Цитата из docs :

Если два класса различаются в использовании памяти и скорости вставки и удаления

(отсортированный) словарь и SortedList работает немного иначе, чем списки и массивы. Я рекомендовал бы прочитать связанную документацию Microsoft при использовании одного из них.

null значений в списке или массиве

Мне придется заполнить первый и второй элементы нулем, чтобы я мог вставить что-то в 3-й индекс

Обратите внимание, что вы не можете добавить null значения в список или массив целых чисел. Это было бы возможно только с «обнуляемыми целыми». (так что new List<int?>())

0 голосов
/ 13 февраля 2020

Вставка в список - это добавление еще одного элемента в список в указанном месте. Это не то же самое, что установка значения индекса в массиве. Если у вас есть массив из 100 элементов, и вы установите значение на индекс 3, у вас все еще будет 100 элементов в массиве. Если у вас есть список из 100 элементов и вы что-то вставили в индекс 3, теперь у вас есть список из 101 элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...