2016-10-27 5 views
6

I-Struktur haben:LINQ erhalten globalen Index

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

Wie kann es projizieren Sequenz nach mit Linq?

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

So ist die erste Eigenschaft der resultierenden Element muss globalen Index des Grundelements repräsentieren, und der zweite Index der Gruppe darstellen muß, für die dieses Element gehört.

Beispiel: 2. Element der dritten Gruppe wird auf {8,3} projiziert werden:

8 - globale Index der Basiselement

3 - Index der Gruppe Basiselement gehört.

+4

Bieten Sie bitte ein Beispiel, es ist nicht sehr klar, was Sie in diesem Fall erwarten –

+0

Ich denke, ich bekomme es. Sie wollen eine Liste aller entsprechend sortierten Indexpaare. Richtig? –

+0

Ich habe eine Frage ein wenig bearbeitet. – Sic

Antwort

4

Sie können dies tun, indem Sie die Versionen Select und verwenden, die den Index enthalten.

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

Ausgänge

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

+0

@HimBromBeere Ja, behoben. – juharr

+0

Danke. Es funktioniert wie ich wollte – Sic