C# 列表<;双[][]>;列出<;双[]>;
我是一个python爱好者,最近开始了一个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
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哦,我明白你的意思了。。。我想我没有仔细考虑预期的产出。我将修改答案。