Добавление нескольких значений в список

#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 с соответствующей подписью в качестве метода экземпляра или метода расширения. Инициализаторы элементов могут быть простым значением, выражением или инициализатором объекта. Используя инициализатор коллекции, вам не нужно указывать несколько вызовов; компилятор добавляет вызовы автоматически.