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ş:
Python: liste üreteci ile bir sözlük o...
C bir Sözlük üzerinde yineleme için en...
Neden karma tablo üzerinde Sözlük terc...
Java bir Liste üzerinde yineleme için ...
En "pythonic" parçalar bir l...