SortedList<K ,V>
'da Alt Sınır işlevi var mı? Fonksiyon, ilk elemanı belirtilen anahtara eşit veya daha büyük olana döndürmelidir. Bunu destekleyen başka bir sınıf var mı?SortedList <K ,V>'da Alt Sınır işlevi var mı?
Çocuklar - lütfen soruyu bir kez daha okuyun. Varsa anahtarı döndüren bir işleve ihtiyacım yok. Kesin anahtar eşleşmesi olmadığında senaryoya ilgi duyuyorum.
O (log n) saat ile ilgileniyorum. Bu, foreach döngüsüyle ilgili bir problemim olmadığı anlamına geliyor, bunun yerine bunu yapmanın verimli bir yoluna sahip olmak istiyor.
Bu konuda bazı testler yaptım.
Linq ifadeleri ne derleyici ne de çalışma zamanı makinesi tarafından optimize edilmez, bu nedenle tüm koleksiyon öğeleri arasında gezinirler ve yavaşça O (n) olurlar.
public static int FindFirstIndexGreaterThanOrEqualTo<T>(
this IList<T> sortedCollection, T key
) where T : IComparable<T> {
int begin = 0;
int end = sortedCollection.Count;
while (end > begin) {
int index = (begin + end)/2;
T el = sortedCollection[index];
if (el.CompareTo(key) >= 0)
end = index;
else
begin = index + 1;
}
return end;
}
Anahtarlar özelliğini her okuduğumuzda koleksiyon toplanmadı mı? – agsamek
agsamek: Hayır, rejenere değil. Orijinal koleksiyondaki öğelere doğrudan erişim sağlayan bir iç sınıf KeyList örneğini döndürür. İşlemde hiçbir şey kopyalanmaz. –
"Anahtarlar ve Değerler için kopya yok", bir SortedDictionary –