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ı