8 Kasım 2017 Çarşamba

Linq Zip metodu

Giriş
Eşit uzunlukta iki veriyapısını beraber dolaşabilmemizi sağlar.

Örnek
Elimizde iki tane liste olsun.
List<int>    list_ID = ...;
List<string> list_Position = ...;
İki listeyi birleştirip pozisyonu "B" olanları seçerek ilk id alanını almak için şöyle yaparız.
int? id = list_Position.Zip (list_ID, (x, y) => new { pos = x, id = y })
                       .Where(x => x.pos == "B")
                       .Select(x => x.id)
                       .FirstOrDefault();
Örnek
Aynı listeyi zip'leyerek dolaşmak yani ikişer ikişer dolaşmak için şöyle yaparız. Önce iki liste oluştururuz.
var items = "1,1,1,5,5,4,4,1,1,1,3,3,3,3,3".Split(',');
var itemsIndexed = items.Select((n, idx) => (Value: n, Index: idx));
Daha sonra şöyle yaparız.
var result = itemsIndexed
    .Zip(itemsIndexed.Skip(1), (l, r) => (Left: l, Right: r))
    .Where(i => i.Left.Value != i.Right.Value)
    .Select(i => i.Right.Index);

Hiç yorum yok:

Yorum Gönder