29 Ekim 2016 Cumartesi

Linq Partitioning Metodları

Giriş
Partitioning metodları diziyi iki veya daha fazla kısma ayırırlar.

Skip
Bazı elemanları atlamamızı sağlar.

Örnek 1
İlk 3 elemanı atlatıp sonraki 5 elemanı almak için şöyle yaparız
values.Skip(3).Take(5).Average();
Örnek 2
Elimizde bir dizi olsun
int[] arr = { 2, 4, 3, 9, 1, 0 };
İlk elamanı sona taşıyarak yürümek isteyelim.

{ 4, 3, 9, 1, 0, 2 }
 Şöyle yaparız. Mevcut dizi değişmez.

foreach(int i in arr.Skip(1).Concat(arr.Take(1)))
{
    ...
}

SkipWhile
Örnek yaz

Take
Take belirtilen sayıda elemanı almamızı sağlar. Eğer belirtilen sayıdan daha az eleman varsa bile sorun çıkarmaz. Elimizde şu elemanlar olsun
{ 1, 2, 3, 4, 5, 6 }
Şöyle yaparsak
list.Skip(2).Take(5);
5 tane eleman kalmasa bile şu çıktıyı alırız.
{ 3, 4, 5, 6 }
İlginç bir soruda hem en baştaki hem de en sondaki 5 elemanı almak istersek bir sefer nasıl yapabileceğimiz sorulmuş. Cevabı index kullanan Where ile süzme yapmak şeklinde verilmiş.

TakeWhile
Elimizde şöyle bir liste olsun.
var list = new List<GiftCard>
{
  new GiftCard() {CardNumber = "...", SecurityCode = "...", Balance = 75},
  new GiftCard() {CardNumber = "...", SecurityCode = "...", Balance = 85},
  new GiftCard() {CardNumber = "...", SecurityCode = "...", Balance = 40},
  new GiftCard() {CardNumber = "...", SecurityCode = "..", Balance = 30}
};
Toplam tutar 100'ün altında olduğu sürece listeden eleman çekmek için şöyle yaparız.

var orderTotal = 100;
double current = 0;
var cards = list
  .OrderBy(x => x.Balance)
  .TakeWhile(card => 
  {              
    bool returnvalue = current < orderTotal; 
    current += card.Balance;
    return returnvalue;
  })
  .ToList();


Hiç yorum yok:

Yorum Gönder