2013-08-30 6 views
1

Я парень-питон и недавно начал проект C#. Одна часть моего кода принимает myList = List<double[][]> и должна превратить ее в myNewList = List<double[]>, чтобы перейти к другой функции.Список <double[][]> в список <double[]>

Итак, пусть myList выглядит следующим образом:

{{{0.0, 1.0}, {2.0, 3.0}}, {{4.0, 5.0}, {6.0, 7.0}}} 

Я хочу myNewList выглядеть следующим образом:

{{0.0, 1.0}, {2.0, 3.0}, {4.0, 5.0}, {6.0, 7.0}} 

В Python, я хотел бы сделать это:

myNewList = list(itertools.chain.from_iterable(myList)) 

Теперь, Я очень легко реализую это с помощью цикла foreach и держите Add до myNewList, но кто-нибудь знает о встроенном способе сделать это?

ответ

2

Вы можете использовать метод SelectMany для "придавить" списки. В принципе, если у вас есть список списков, он объединяет все списки в один. В этом случае у вас есть List<double[][]>, поэтому он вложен три раза.

List<double[]> flattenedList = myList.SelectMany(x => x.Select(y => y).ToArray()).ToList(); 

Сделаю это за вас. Первый Select на самом деле ничего не делает, мне нравится думать о нем, как о цикле for, читайте его как «для каждого x делаете x.SelectMany» нужно, чтобы спуститься на один уровень к элементам double[][], так как это действительно то, что вы сглаживаете.

+0

@Servy хороший звонок. починил это. – evanmcdonnal

+0

Это создает список из 2 элементов с 4 массивами элементов. Это неверно. – lukegravitt

+0

@lukegravitt О, я понимаю, о чем вы говорите ... Наверное, я не смотрел на ожидаемый результат достаточно близко. Я пересмотрю ответ. – evanmcdonnal

5

LINQ лучше использовать:

var myNewList = myList.SelectMany(x=>x).ToList(); 
+0

@Servy, вы правы, обновили его. –

+0

Это приведет к созданию двух массивов длины для ввода образца. OP хочет четыре массива длины два. – Servy

+0

Это дает список из 2 элементов с 4 массивами элементов. Это неверно. – lukegravitt

4

Попробуйте это:

myNewList.SelectMany(x => x.Select(y => y).ToArray()).ToList(); 

Это даст вам List<double[]>.

+0

Я пробовал код выше в VS2012 и дает ожидаемый результат. Он дает мне список с 4 двойными []. Может быть, я не понимаю вопроса ??? –

+0

NVM, это правильный ответ. – Servy

+0

+1 Протестировано и это. Он дает точно желаемые результаты. – lukegravitt

Смежные вопросы