SORU
10 Mayıs 2010, PAZARTESİ


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
10 Mayıs 2010, PAZARTESİ


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;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • Metheud

    Metheud

    9 EYLÜL 2006
  • ODN

    ODN

    26 Kasım 2006