2016-04-11 5 views
14

Ich habe Code geschrieben, der funktioniert, aber ich kann nicht scheinen, einen besseren Weg zu finden, die Listen zusammen zu kombinieren, wenn sie den gleichen Index haben.Wirksame Weise in LINQ des Beitritts basierend auf Index

class Apple {}; 
    class Carrot {}; 

    var apples = new list<Apple>(); 
    var carrot = new list<Carrot>(); 

    var combine = from a in apples 
        from c in carrots 
        where apples.IndexOf(a) == carrots.IndexOf(c) 
        select new {a, c}; 

(Wenn ich kombinieren sagen, ich meine nicht an das Ende der Liste anhängen {{a, b}, {a, b}, .... {}}. Vielleicht habe ich die Terminologie falsch, wenn die Forschung versucht)

Antwort

19

Sie Enumerable.Zip verwenden können.

var combine = apples.Zip(carrots, (a, c) => new { Apple = a, Carrot = c}); 
+1

wo apples.IndexOf (a) == Karotten.IndexOf (c) - Bedingung fehlt –

+7

Nein, op will nur ein Paar nach ihrem Index erhalten. Zip tut es automatisch –

2
apples.Select((a,i)=> new { Apple = a, Carrot = carrots[i] }); 

, die funktionieren auch sollte.

+3

Dies wird werfen, wenn Äpfel Array mehr Elemente als Karotten-Array hat. – Fabjan

Verwandte Themen