Используйте LINQ для объединения нескольких коллекций в одну коллекцию - PullRequest
0 голосов
/ 30 августа 2018

Можно ли использовать LINQ для объединения / объединения двух или более коллекций одного типа и размера в новую коллекцию того же типа и размера?

var list01 = new List<string> { "A",  "", "", "B",  "",  "", "" };
var list02 = new List<string> {  "", "C", "",  "",  "", "D", "" };
var list03 = new List<string> {  "",  "", "",  "", "E",  "", "" };

           The desired result:  "A", "C", "", "B", "E", "D", "";

Если одна коллекция содержит данные в определенной позиции, ни одна из других коллекций не будет хранить данные в одной и той же позиции, например, первая позиция в list02 и list03 всегда будет пустой, поскольку list01 содержит A в первой позиции.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Или альтернативное решение, просто добавьте элементы вместе внутри Zip:

var list = list01.Zip(list02, (a,b) => a + b)
                 .Zip(list03, (a,b) => a + b);

добавление string к null или к пустому string даст тот же результат.

0 голосов
/ 30 августа 2018

Как и предполагалось, это может быть достигнуто с помощью некоторых встроенных функций LINQ.

Следующее решение не имеет встроенной функции.

static List<string> megreLists(List<string> lst1, List<string> lst2)
{
    List<string> result = new List<string>();

    if (lst1.Count == lst2.Count)
    {
        for (int i = 0; i < lst1.Count; i++)
        {
            if (string.IsNullOrWhitespace(lst1[i]) && lst1[i].Trim() == lst2[i].Trim())
            {
                result.Add(lst1[i]);
            }
            else if (string.IsNullOrWhitespace(lst1[i]) && lst1[i].Trim() != lst2[i].Trim())
            {
                result.Add(lst1[i]);
            }
            else if (string.IsNullOrWhitespace(lst2[i]) && lst1[i].Trim() != lst2[i].Trim())
            {
                result.Add(lst2[i]);
            }
        }
    }

    return result;
}



var result = megreLists(megreLists(list01, list02), list03);
0 голосов
/ 30 августа 2018

Вы, вероятно, хотите использовать Zip дважды:

var result = list01
                .Zip(list02, (a, b) => !string.IsNullOrEmpty(a) ? a : b)
                .Zip(list03, (a, b) => !string.IsNullOrEmpty(a) ? a : b);
Console.WriteLine(string.Join(",", result));

Попробуйте онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...