C bir Sözlük en yüksek değer anahtarı almak için iyi bir yoldur
Dictionary<string, double> results
en yüksek değeri anahtar almaya çalışıyorum.
Bu ben şimdiye kadar ne var:
double max = results.Max(kvp => kvp.Value);
return results.Where(kvp => kvp.Value == max).Select(kvp => kvp.Key).First();
Bu biraz verimsiz gibi görünüyor, ancak bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyordum.
CEVAP
Bu en okunabilir(n) cevap standart SERİ kullanıyor sanırım.
var max = results.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;
edit: CoffeeAddict için açıklama
Aggregate
bilinen fonksiyonel kavramı Fold SERİ adıdır
Üzerinde kümesinin her elemanı döngüler ve verdiğiniz ne olursa olsun geçerlidir.
Burada, ben sağlamak işlevi büyük değeri karşılaştırma işlevi.
Döngü, Aggregate
en son ne zaman dönüş sonucu hatırlarken benim fonksiyonu denir. Karşılaştırma görevim 8 ** olarak değişken içine beslenir. 9* *değişken seçili olan elementtir.
Toplama tüm fiziksel sonra, benim karşılaştırma işlevi adlı çok en son ne zaman sonuç verir. Sonra sözlük bir giriş olduğunu biliyorum çünkü .Key
üyesi okudum
Burada bakmak için farklı bir yol [bu derler garanti etmiyorum ;) ]
var l = results[0];
for(int i=1; i<results.Count(); i)
{
var r = results[i];
if(r.Value > l.Value)
l = r;
}
var max = l.Key;
Nasıl Karma bir anahtarı kaldırın ve R...
Neden eğer sözlük anahtarı varsa kontr...
Nasıl MySQL iki değer max almak için?...
C başlatmak için uygun bir yoldur, ama...
Django bir değişken ile sözlük bir değ...