2016-06-12 2 views
1

Die Operation, die ich mit LINQ implementieren möchte, sollte jedes n-te Element beider Arrays paaren. Wenn ein n-tes Item nicht existiert, wird null genommen. Bitte beachten Sie, dass Arrays unterschiedliche Längen haben können.LINQ-Projektion, die Elemente und Füllungen mit NULL packt, wenn n-tes Element nicht existiert

Zum Beispiel, wenn ich

  • a => {1, 2, 3, 4 }
  • b => {0, 2, 0 }

  • result => { {1,0}, {2,2}, {3,0}, {4, null} }

haben Wenn ich a und b invertiert, sollte ich erhalten:

  • a => {0, 2, 0 }

  • b => {1, 2, 3, 4 }

  • result => { {0,1}, {2,2}, {0,3}, {null, 4} }

Ich habe gedacht, aus einer Kombination von Zip und DefaultIfEmpty, aber es funktioniert nur in eine Richtung :(

Antwort

2
Enumerable.Range(0, Math.Max(a.Length, b.Length)). 
    Select(x => new Tuple<int,int>( 
         x<a.Length?a[x]:null, 
         x<b.Length?b[x]:null) 
     ).ToArray(); 

Oder wenn Sie nicht möchten, dass die Elemente des resultierenden Array vom Typ Tuple sein: sollte

Enumerable.Range(0, Math.Max(a.Length, b.Length)). 
    Select(x => new { 
         x<a.Length?a[x]:null, 
         x<b.Length?b[x]:null 
        } 
     ).ToArray(); 
+0

Bereich geht von 0 – omikad

+0

Und auch ist es besser, Länge in Math.max zu verwenden, da ursprüngliche Frage ging es um Arrays – omikad

Verwandte Themen