2016-02-24 1 views
-2

У меня есть коллекция из спискаКак скопировать значение двух подписок в один список в C#?

List<List<int>> FS=new List<List<int>>() 

Я добавил значение для каждого списка. Теперь мои FS Посмотрите, как FS={{1,2,3},{5,7},{3}}.

Как объединить значения в первый два подписок в один новый список? моя потребность, чтобы получить как {1,2,3,5,7}

+0

Что вы уже пробовали? Что не работает? – soon

+1

Вы хотите объединить первые два списка *, потому что * у последнего есть только значение '3', которое уже находится в первых двух списках, или независимо от того, что является значением, вы хотите только первые два списка? – Ian

+0

'два подписок в один новый список?' Как насчет третьего? – CarbineCoder

ответ

2

Если FS всегда имеет 2 или больше деталей, используйте List.AddRange():

FS[0].AddRange(FS[1]); 

Редактировать

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

List<int> newList = new List<int>(); 
newList.AddRange(FS[0]); 
newList.AddRange(FS[1]); 
+1

Возможно, вы также захотите добавить, что этот FS [0] .AddRange (FS [1]) также должен быть назначен новому списку, чтобы избежать { 1,2,3,5,7}, {5,7}, {3}} в первоначально списке. – Ian

+0

Thanks @Ian Вы правы. Обновлен мой ответ с новыми подробностями. –

+1

Да, теперь он должен работать. ;) – Ian

1

использования как GetRange и SelectMany:

FS = FS.GetRange(0, 2).SelectMany(x => x).ToList(); 

GetRange, чтобы получить N (в вашем случае N = 2) число элементов из List.

{{1,2,3},{5,7},{3}} => {{1,2,3},{5,7}} 

SelectMany используется для выравнивания List<List<int>> в List<int>.

{{1,2,3},{5,7}} => {1,2,3,5,7} 
+0

@AlexJolig, вы правы. Я обновил свой ответ. И я думаю, что ваш ответ, если число элементов равно двум или выше, тоже будет работать. – Ian

+1

да. Я удалил комментарий. в любом случае, вы мудрый парень, так как я видел вас в первый раз с репутацией 2k, и я уважаю вас :) –

+0

@AlexJolig Первоначально я думал, что OP не хочет получать третий список, потому что он уже имеет значение в нем (что 3), поэтому я предложил «Distinct», но я, кажется, ошибаюсь после того, как подтвердил OP. – Ian

0

Если вы хотите объединить все три списка и выбрать только отдельные элементы, вы можете сделать объединение с отдельными.

FS.SelectMany(list => list).Distinct(); 

Если вы хотите совместить первые два списка. то вам нужно прибегнуть к фильтрации только двух элементов или выбрать верхние 2 элемента в списке, а затем объединить.

FS.Take(2).SelectMany(list => list).Distinct(); 
1

Поскольку вы хотите объединить первые два Lists, вы можете использовать Take получить первые две коллекции, а затем вы можете использовать SelectMany линейной коллекции коллекций.

FS.Take(2).SelectMany(e=>e); 

Для устранения дубликатов использовать Distinct

FS.Take(2).SelectMany(e=>e).Distinct(); 

Работа Demo

0

Вы должны использовать метод «AddRange» в списке

List<int> combinedList = new List<int>(FS[0]); 
combinedList.AddRange(FS[1]);