从多个阵列中循环构建一个阵列

时间:2019-06-04 08:38:12

标签: c# arrays foreach

我目前正在尝试通过将多个嵌套数组注入到for循环中来构建一个数组。这目前无法正常工作,但我无法弄清楚自己在做什么。

这是我当前的代码:

// initialise an empty array
var x = new List<Model>();

// initialise an empty array to use in the loop
var mergedX = new List<Model>();

// Build up the array using the loop
foreach (var y in ys) {
  if (y.nestedArray != null) {
    mergedX = x.Concat(y.nestedArray).ToList();
  }
}

// Return the built up array
return mergedX;

我在做什么错/有没有更好的方法来实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:3)

问题出在这一行:

mergedX = x.Concat(y.nestedArray).ToList();

您始终采用x的值,但永远不要更改它。因此mergedX将只包含最终数组的项目。

也许完整的LINQ会更好:

return ys
    .Where(y => y.nestedArray != null) // only take items from ys if nestedArray != null
    .SelectMany(y => y.nestedArray) // flatten the many arrays into one (in order)
    .ToList(); // materialise the result into a list

或者,您可以使用List<T>的{​​{3}}方法:

foreach (var y in ys)
{
    if (y.nestedArray != null)
    {
        mergedX.AddRange(y.nestedArray);
    }
}