2016-10-27 28 views
6

Mam strukturę:LINQ uzyskać wskaźnik globalny

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

Jak może wystawać po to, aby kolejność przy użyciu LINQ?

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

Więc pierwsze własność powstałego elementu musi reprezentować globalny indeks elementu bazowego, a drugi musi reprezentować indeks grupy dla których ten element należy.

Przykład: 2nd element 3 w grupie jest rzutowany na {8,3}

8 - całkowity wskaźnik elementu bazowego

3 - wskaźnik z elementem bazowym grupy należy.

+4

Podaj przykład proszę, nie jest bardzo jasne, czego się spodziewasz w tej sprawie. –

+0

Myślę, że rozumiem. Chcesz listę wszystkich zamówionych par indeksów. Tak? –

+0

Trochę zmieniłem pytanie. – Sic

Odpowiedz

4

Możesz to zrobić, używając wersji Select i SelectMany, które zawierają indeks.

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) + "}"))); 

Wyjścia

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

+0

@HimBromBeere Tak, naprawione. – juharr

+0

Dziękuję. Działa tak, jak chciałem – Sic