Как получить отдельный список из списка строк с разделителями - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть список строк с разделителями, и мне нужно получить отдельный список разделенных строк.

, например

В: { "thing 1;thing 2", "thing 2;thing 3", "thing 3;thing 4" }

Out { "thing 1", "thing 2", "thing 3", "thing 4" }

Это то, что я имею до сих пор:

var delimitedThings = new List<string> { "thing 1;thing 2", "thing 2;thing 3", "thing 3;thing 4" };

var duplicatedThings = new List<string>();

foreach (var t in delimitedThings)
{
    duplicatedThings.AddRange(t.Split(';'));
}

var things = duplicatedThings.Distinct();

Что работает, но есть ли способ получить things из delimetedThings в одном запросе LINQ?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы хотите эффективно сгладить «последовательность последовательностей» в одну последовательность - и это то, для чего SelectMany. Таким образом, ваш код может быть записан как:

var things = delimitedThings.SelectMany(t => t.Split(';'))
                            .Distinct();

Или выражение запроса:

var things = (from item in delimitedThings
              from thing in item.Split(';'))
              select thing).Distinct();

Я, конечно, не использовал бы выражение запроса для этого случая, но полезно знать, что второе (и последующее) предложение from в выражении запроса переводится как SelectMany вызов.

0 голосов
/ 04 сентября 2018

с помощью SelectMany(), которая расширяет вложенные списки

var things = delimitedThings.SelectMany(x => x.Split(';')).Distinct();
...