Как объединить списокв C # - PullRequest
11 голосов
/ 23 декабря 2010

У меня есть List<List<String>>, и который содержит

{  {"A" , "B" }, 
   {"C" , "D" }
}

Мне нужно объединить весь внутренний список в другой список

Таким образом, полученный List<String> будет содержать

     {"A","B","C","D"}

Теперь я использую for loop, чтобы сделать это

Есть ли способ сделать это, используя LINQ или Lambda Expression.

Пожалуйста, помогите мне сделать это.

Заранее спасибо.

Ответы [ 6 ]

14 голосов
/ 23 декабря 2010
List<List<string>> collections = new List<List<string>>()
        {
          new List<string>(){"A" , "B" }, 
          new List<string>() {"C" , "D" }
        };

var list = collections.SelectMany(x => x).ToList();

SelectMany создает дерево выражений, которое при оценке сводит список в список к одному списку комбинированных элементов.

ToList заставляет дерево выражения вычисляться и в результате получается список.

Если вы хотите исключить дубликаты, вы можете добавить отдельный вызов перед вызовом ToList () '

13 голосов
/ 23 декабря 2010

Не совсем Союз, но вы можете попробовать это

YourList.SelectMany(l=>l).Distinct()
3 голосов
/ 23 декабря 2010

Как насчет Агрегат?

myLists.Aggregate((left, right) => left.Union(right));

Для меня это более выразительно, чем использование SelectMany, потому что он точно говорит вам, что вы делаете: Объедините ваш список списков, вызвав для них объединение.

3 голосов
/ 23 декабря 2010
var result = myLists.SelectMany(l => l);
3 голосов
/ 23 декабря 2010

Вы можете использовать метод расширения SelectMany .

List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } };

IEnumerable<string> results = masterList.SelectMany(l => l);
1 голос
/ 23 декабря 2010

Только для ударов:

(from list in theList from e in list select e).Distinct().ToList()

Это, конечно, то же самое решение, что и у @Aksander Taran, только с синтаксисом запроса вместо лямбда-синтаксиса. (Или, по крайней мере, так должно быть - у меня под рукой нет LINQPad.)

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