#c#
#c#
Вопрос:
Возможно ли добавить несколько элементов в список или добавить список значений в список.
вот мой текущий псевдокод для этого:
List<string> myList = new List<string>();
myList.add("a","b","c","d","e","f","g");
myList.add("h","i","j","k","l","m","n");
myList.add("a1","a2","a3");
и мой ожидаемый результат:
[["a","b","c","d","e","f","g"], ["h","i","j","k","l","m","n"], ["a1","a2","a3"]]
Любые предложения / комментарии TIA.
Комментарии:
1. Вы хотите создать список списков?
2. да, это то, что я хочу, потому что позже я сделаю цикл, а затем просто получу выбранный индекс в каждом списке.
Ответ №1:
То, о чем вы просите, является List<List<string>>
. Вероятно, существуют лучшие структуры для хранения ваших данных, но поскольку вы не указали никакого контекста, вы можете сделать это:
var myList = new List<List<string>>();
И добавьте элементы, подобные этому:
myList.Add(new List<string> { "a", "b", "c", "d", "e", "f", "g" });
myList.Add(new List<string> { "h", "i", "j", "k", "l", "m", "n" });
myList.Add(new List<string> { "a1", "a2", "a3" });
Или в одном фрагменте кода с использованием инициализатора коллекции:
var myList = new List<List<string>>
{
new List<string> { "a", "b", "c", "d", "e", "f", "g" },
new List<string> { "h", "i", "j", "k", "l", "m", "n" },
new List<string> { "a1", "a2", "a3" }
};
Комментарии:
1. Вы также можете использовать метод AddRange для добавления более одного значения одновременно.
2. @Mick Я не уверен, что
AddRange
делает код более читаемым в этой ситуации. Нам нужно было бы создатьIEnumerable
, что не является необходимым.3. @DavidG, я думаю, что Мик говорит о замене 3x
myList.Add(new List<string> { .. }
наmyList.AddRange(new [] { new List<string> { .. }, new List<string> { .. }, new List<string> { .. } });
, который выглядит точно так же, как инициализатор коллекции.4. @vasily.sib Да, и я говорю, что это ужасный способ сделать это. Это создает промежуточный объект массива, который не нужен, и, я думаю, делает его менее читаемым.
5. @DavidG, не могли бы вы, пожалуйста, объяснить, что в этом такого ужасного? При небольшом форматировании это будет выглядеть почти так же, как инициализатор коллекции, а промежуточный объект массива будет удален GC при первой возможности. Кроме того, вопрос касался добавления значений в список, так что
AddRange
пример выглядит удобным.
Ответ №2:
Должно быть так же просто, как
var myList = new List<List<string>>()
{
new List<string> { "a", "b", "c", "d", "e", "f", "g" },
new List<string> { "h", "i", "j", "k", "l", "m", "n" },
new List<string> { "a1", "a2", "a3" },
};
// OR
var myarray = new[]
{
new[] { "a", "b", "c", "d", "e", "f", "g" },
new[] { "h", "i", "j", "k", "l", "m", "n" },
new[] { "a1", "a2", "a3" },
};
Дополнительные ресурсы
Инициализаторы объектов и коллекций (руководство по программированию на C #)
C # позволяет создавать экземпляр объекта или коллекции и выполнять назначения элементов в одной инструкции.
Инициализаторы коллекции позволяют указать один или несколько инициализаторов элементов при инициализации типа коллекции, который реализует IEnumerable и имеет Add с соответствующей подписью в качестве метода экземпляра или метода расширения. Инициализаторы элементов могут быть простым значением, выражением или инициализатором объекта. Используя инициализатор коллекции, вам не нужно указывать несколько вызовов; компилятор добавляет вызовы автоматически.