при условии, что у вас есть входные данные как List<string> input
, тогда этот код должен работать:
var splittet = input.Select(i => i.Split("\\".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
Action<string[], int> print = (string[] lst, int index) => Console.WriteLine("\\" + string.Join("\\", lst.Skip(index)));
splittet.Aggregate(new string[] { },
(common, item) =>
{
var index = Enumerable.Range(0, Math.Min(common.Length, item.Length)).FirstOrDefault(i => common[i] != item[i]);
print(item, index);
return item;
}
);
Итак, учитывая входные данные
var input = new List<string> { @"\1925\10\04\issue1",
@"\1925\10\05\issue1",
@"\1925\10\07\issue1",
@"\1925\10\10\issue1",
@"\1925\10\11\issue1",
@"\1925\10\12\issue1",
@"\1925\10\04\issue1",
@"\1925\10\04\issue2",
@"\1925\10\04\issue3",
@"\1925\10\04\issue4"};
, это вывод:
\1925\10\04\issue1
\05\issue1
\07\issue1
\10\issue1
\11\issue1
\12\issue1
\04\issue1
\issue2
\issue3
\issue4
Некоторое объяснение:
Сначала вместо того, чтобы работать со списком строк, я разделил его на список токенов.
Тогда я определил какое-то действие печати.вместо этого вы можете добавить результат в список вывода или сделать что угодно.В этом случае это просто запись в консоль
, после чего список агрегируется.Агрегатор начинается с пустого массива строк.затем он пытается найти первый индекс, где первый элемент отличается от списка emtpy, и печатает все части этого индекса.и затем первый индекс возвращается в агрегатор.Затем агрегатор сравнивает этот первый элемент со вторым элементом, находит первый индекс, где детали отличаются, и печатает части оттуда и т. Д. И т. Д.