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 :)
#CSharp #linq #dizi #array #sıralı