SORU
2 HAZİRAN 2009, Salı


Gruplandırma ile bir liste üzerinde bir sözlük oluşturmak

Liste aşağıdaki nesne var:

public class DemoClass
{
    public int GroupKey { get; set; }
    public string DemoString { get; set; }
    public object SomeOtherProperty { get; set; }
}

Şimdi, aşağıdaki sözlük oluşturmak istiyorum

Dictionary<int, List<DemoClass>>

Özelliği List<DemoClass> GroupKey ama bu nasıl yapılır anlamıyorum ve yardıma grup istiyorum.

Biraz düşündükten sonra, gerekli davranışı elde:

var groupedDemoClasses = from demoClass in mySepcialVariableWhichIsAListOfDemoClass
                            group demoClass by demoClass.GroupKey
                            into groupedDemoClass
                            select groupedDemoClass;
var neededDictionary = groupedDemoClass.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

ama bir tek açıklama bu hale getirmek için mi?

CEVAP
2 HAZİRAN 2009, Salı


Sadece mquander's suggestion beton:

var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
                             .GroupBy(x => x.GroupKey)
                             .ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());

Eğer daha kısa değişken isimleri çok kullandıysanız bunu daha kısa yapmak istiyorum, tabii ki :)

Ancak, Lookup daha uygun olabilir önerebilir miyim? Bir Arama temelde bir gerçekten sürece IEnumerable<T> - anahtarı bir sözlüktürgerekbir liste olarak değerleri, kod ToLookup çağrı ile daha, Daha ve daha verimli hale getirir:

var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
                             .ToLookup(x => x.GroupKey);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • girleffect

    girleffect

    20 Mayıs 2008
  • Hey Nadine

    Hey Nadine

    24 Kasım 2006
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011