SORU
16 Kasım 2008, Pazar


C birleştirme sözlük#

C 2 veya daha fazla sözlük (Dictionary<T1,T2>) birleştirmek için en iyi yolu nedir#? 3.0 ETMENİZ iyi gibi.

Çizgisinde imza: bir yöntem düşünüyorum

public static Dictionary<TKey,TValue>
                 Merge<TKey,TValue>(Dictionary<TKey,TValue>[] dictionaries);

ya

public static Dictionary<TKey,TValue>
                 Merge<TKey,TValue>(IEnumerable<Dictionary<TKey,TValue>> dictionaries);

DÜZENLEME:JaredPar ve Jon Skeet ve serin bir çözüm var, ama yinelenen anahtarlar işleyen bir şey düşünüyordum. Çarpışma durumunda, dict tutarlı olduğu sürece kayıtlı olduğu önemli değil.

CEVAP
16 Kasım 2008, Pazar


Bu kısmen eğer çiftleri içine çalıştırırsanız olmasını istediğinize bağlıdır. Örneğin, yapabilirsiniz:

var result = dictionaries.SelectMany(dict => dict)
                         .ToDictionary(pair => pair.Key, pair => pair.Value);

Eğer yinelenen anahtarlar varsa herhangi bir darbe olacak.

Eğer ToLookup Eğer bir anahtar başına birden çok değeri olan bir arama alırsınız. EDİT: Sanaolabiliro zaman bir sözlük dönüştürmek:

var result = dictionaries.SelectMany(dict => dict)
                         .ToLookup(pair => pair.Key, pair => pair.Value)
                         .ToDictionary(group => group.Key, group => group.First());

Biraz çirkin ve verimsiz ama kod açısından bunu yapmak için en hızlı yolu bu. (Bu, kuşkusuz test etmedim.)

Sen-ebil yazmak kendi ToDictionary2 uzatma yöntemi ders ile daha iyi bir isim, ama zamanım yok düşün artık değil çok zor, sadece üzerine (veya görmezden) yinelenen anahtarlar. Önemli bit (aklıma) SelectMany kullanarak, ve bir sözlük anahtar/değer çiftleri üzerinde yineleme destekleyen gerçekleştiriyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gali B

    Gali B

    1 EYLÜL 2006
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012
  • TheRightTire

    TheRightTire

    14 EKİM 2009