Создание одного массива из нескольких массивов в цикле - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время я пытаюсь создать один массив, вставляя несколько вложенных массивов в цикл 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 Ответ

3 голосов
/ 04 июня 2019

Проблема в этой строке:

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> s AddRange метод:

foreach (var y in ys)
{
    if (y.nestedArray != null)
    {
        mergedX.AddRange(y.nestedArray);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...