C# 列表<;双[][]>;列出<;双[]>;

C# 列表<;双[][]>;列出<;双[]>;,c#,arrays,flatten,C#,Arrays,Flatten,我是一个python爱好者,最近开始了一个C#项目。我的代码的一部分接受myList=List并需要将其转换为myNewList=List以传递给另一个函数 因此,假设myList如下所示: {{{0.0, 1.0}, {2.0, 3.0}}, {{4.0, 5.0}, {6.0, 7.0}}} {{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

我是一个python爱好者,最近开始了一个C#项目。我的代码的一部分接受
myList=List
并需要将其转换为
myNewList=List
以传递给另一个函数

因此,假设
myList
如下所示:

{{{0.0, 1.0}, {2.0, 3.0}}, {{4.0, 5.0}, {6.0, 7.0}}}
{{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}}}
{{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
ing添加到
myNewList
,但是有人知道这样做的内置方法吗?

更好地使用
LINQ

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

更好地使用
LINQ

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

您可以使用方法
SelectMany
来“展平”列表。基本上,如果您有一个列表列表,它会将所有列表连接成一个列表。在本例中,您有一个
列表
,因此它嵌套了三次

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

我会帮你的。第一个
Select
实际上并没有什么作用,我喜欢把它看作是一个for循环,把它读作“for each x do x.SelectMany”,它需要从一层向下到
double[][]
元素,因为这些元素才是真正要展平的元素。

您可以使用
SelectMany
方法来“展平”列表。基本上,如果您有一个列表列表,它会将所有列表连接成一个列表。在本例中,您有一个
列表
,因此它嵌套了三次

  List<double[]> flattenedList = myList.SelectMany(x => x.Select(y => y).ToArray()).ToList();
List flattedlist=myList.SelectMany(x=>x.Select(y=>y).ToArray()).ToList();
我会帮你的。第一个
Select
实际上没有任何作用,我喜欢将其视为一个for循环,将其理解为“for each x do x.SelectMany”,它需要向下一层到
double[][]
元素,因为这些元素确实是您要展平的元素。

尝试以下方法:

myNewList.SelectMany(x => x.Select(y => y).ToArray()).ToList();
这将为您提供一个
列表

尝试以下操作:

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

这将为您提供一个
列表

我在VS2012中尝试了上面的代码,并给出了预期的结果。它给了我一个有4个double[]的列表。也许我不明白这个问题???+1也测试了这个。我在VS2012中尝试了上面的代码,得到了预期的结果。它给了我一个有4个double[]的列表。也许我不明白这个问题???+1也测试了这个。它会精确地生成所需的结果。这将为样本输入生成两个长度为的数组。OP需要四个长度为2的数组。这将生成一个包含4个元素数组的2元素列表。这是不正确的。@Servy对于OP的要求,我无法想象答案会如此简单,因为我更新了(也测试了)。这将导致两个长度为的数组,用于样本输入。OP需要四个长度为2的数组。这将生成一个包含4个元素数组的2元素列表。这是不正确的。@Servy对于OP的要求,我无法想象答案会如此简单,因为我更新了(也测试了)。这将生成一个包含4个元素数组的2元素列表。这是不对的。@lukegravitt哦,我明白你的意思了。。。我想我没有仔细考虑预期的产出。我将修改答案。这将生成一个包含4个元素数组的2元素列表。这是不对的。@lukegravitt哦,我明白你的意思了。。。我想我没有仔细考虑预期的产出。我将修改答案。