22 October 2019 Tuesday
Twitter

LINQ ile bir dizinin sıralı olup olmadığını test etme

Elinizdeki dizinin sıralı olup olmadığını nasıl test edersiniz?

Diyelim ki elinizde bir dizi var:

var dizi = new int[] { 1, 5, 3, 4, 8, 9, 10 };

Bu dizi sıralı mı değil mi nasıl anlarız?

Çeşitli algoritmalar düşünülebilir tabii, ama en kısa yoldan en az kodla nasıl çözeriz?

Linq tam bu noktada işimizi görecektir.

Eğer .Net Framework 4+ kullanıyorsanız Enumerable.Zip metodunu kullanabiliriz:

var dizi = new int[] { 1, 5, 3, 4, 8, 9, 10 };
var siraliMi = dizi.Zip(dizi.Skip(1), (a, b) => new { a, b }).All(p => p.a < p.b);
Console.WriteLine(siraliMi);

// false

Bir de sıralı bir dizi üzerinde çalıştıralım:

var dizi = new int[] { 1, 3, 4, 5, 8, 9, 10 };
var siraliMi = dizi.Zip(dizi.Skip(1), (a, b) => new { a, b }).All(p => p.a < p.b);
Console.WriteLine(siraliMi);

// true

 

Eğer .Net Framework 4'ten daha eski bir sürüm kullanıyorsanız şu genişletme metodunu kullanabilirsiniz:

public static class GenisletmetMetotlari
{
  public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this IEnumerable<TFirst> first,
    IEnumerable<TSecond> second,
    Func<TFirst, TSecond, TResult> selector)
  {
    var e1 = first.GetEnumerator();
    var e2 = second.GetEnumerator();
    while (e1.MoveNext() & e2.MoveNext())
      yield return selector(e1.Current, e2.Current);
  }
}

Kolay gelsin :)

 

 

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 5.00 (1 oy)
Yazıdaki kodların kalitesi Puan: 5.00 (1 oy)
İhtiyaca cevap verme Puan: 4.75 (1 oy)
Tavsiye edilebilirlik Puan: 4.70 (1 oy)
Genel değerlendirme Puan: 5.00 (1 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumları
  • Facebook Yorumları Facebook Yorumları
Yeni yorum yaz Toplam: 2, Onay bekleyen: 0.
  1. ekrem

    bu enumarable olmasaydı, işimiz ne kadar zor olacaktı değil mi hocam. her derde deva, mübarek maymuncuk anahtarı sanki :)

    • Devrim Altınkurt

      Katılıyorum :)