Yaklaşık 500.000 ints dizilmiş bir dizi var. Şu anda, hedef int ve tüm elemanlar arasındaki farkları alarak ve sonra LINQ (çok verimsiz) kullanarak minimum farkla sıralama yaparak doğru indeksi seçiyorum.BinarySearch ile fark en yakın endeksi bul
BinarySearch ile çok benzer bir şey yapabilmek istiyorum.
Verilen:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
Bu 2 döndürür:
Pos Value
0 10
1 20
2 30
4 50
5 60
ben endeksi isteyeyim değeri 24 için en yakın değeri bulmak istiyorsanız
1.Verilen olmak döndü Bir sonraki elemanı en yakın yerine sırayla verdiğinden. En yakın dizini veren bir IComparer yazmak mümkün mü?
Verilen değerler:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
ben mümkün olduğunca hızlı bu yapmaya çalışıyorum. LINQ'da şimdiye kadar yaptığım her şey, iyi yapılmış bir ikili arama ile elde edilebileceğine inanıyorum. Giriş için teşekkürler.
@Jon Skeet: +1, ancak yanıt, smiley sonra kapanış parantez eksik, derleme yapmaz. – RedFilter
"daha sonra nereye yerleştirileceğini bul" verimli bir şekilde, tüm dizi arama gerektirebilir – TalentTuner
@Saurabh: Hayır, tam olarak ne 'BinarySearch' zaten yapar - zaten varsa orada değer bulunduğu dizini döndürür veya aksi takdirde '~ insertionPoint'. –