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

  • CNET

    CNET

    5 Mayıs 2006
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011