LINQ получить глобальный индекс

у меня есть структура:

List<List<x>> structure = new { {x,x}, {x,x,x,x}, {x,x,x}}

Как проецировать его на следующую последовательность с помощью linq?

{1,1},{2,1},{3,2},{4,2},{5,2},{6,2},{7,3},{8,3},{9,3}

поэтому первое свойство результирующего элемента должно представлять Глобальный индекс Базового элемента и второй должен представлять группы для которого этот элемент принадлежит.

Пример: 2-й элемент 3-й группы будет спроецирован на {8,3}:

8-Глобальный индекс базы элемент

3-принадлежит индекс Базового элемента группы.

1 ответов


вы можете сделать это с помощью версии Select и SelectMany которые включают индекс.

IList<IList<int>> structure = new[] 
{ 
    new[] { 1, 1 }, 
    new[] { 1, 1, 1, 1 }, 
    new[] { 1, 1, 1 } 
};

var result = structure.SelectMany((l, i) => l.Select(v => i))
    .Select((i, j) => new[] {j + 1, i + 1});

Console.WriteLine(string.Join(",", result.Select(l => "{" + string.Join(",", l) + "}")));

выходы

{1,1},{2,1},{3,2},{4,2},{5,2},{6,2},{7,3},{8,3},{9,3}