2010-01-06 18 views
11

ayrı öğelerin listesini ve bunların sayısı elde edin: Bir HashSetEndişelenecek birçok özelliği ama sadece iki olan bir cisim, varlığını

bir int
myobject.Names olduğunu

myobject.ID

List<myobject> 

Linq bir nedenle olsun kullanın: Sonra buna benzer bir şey görünüyor bu nesnelerin List var Beni tekrarlayıcıya veriyorum, ancak İsim listesini nasıl alacağımı ve ne sıklıkla göründüğümü bilmiyorum.

Verileri döngülemek zorunda kalmamak için Linq kullanmak ister.

Etiketlerim göründüğü gibi, bu C# kullanarak bir ASP.NET çözümüdür.

Bazı açıklama:
benim listesinde sadece üç öğe var Sağlar ki: Madde 1 John Fred Jack onun isimlerinde vardır. Madde 2, John, Fred, Joe ismine sahip. Öğe 3'ün isminde John vardır.

dönmek çalışıyorum şu: John - Ben nesne için kendi karşılaştırıcısı yazmak zorunda aşina olduğum bir not olarak da 1

, - 3 Fred - 2 Jack - 1 Joe Ben sadece düşüncelerimde genel çözüm için 'nasıl yapılır' eksik.

+1

Merhaba, "İsimlerin listesini ve ne sıklıkta ortaya çıktıklarını" dediğinizde. : '.Names özelliği geçerli bir listeyi gösteren bir işaretçi (HashSet);' myobject List 'daki örneklerin sayısını saymak istediğiniz anlamına mı geliyor? Diğer bir deyişle, '.Names özelliği değeri boş değil? Veya '.Names özelliğinde yalnızca Hashid'i olanları içeren yeni bir myObject koleksiyonu oluşturmak mı istiyorsunuz? Biraz açıklama lütfen. – BillW

+0

Ekleme eklendi. –

cevap

18

Çözmeyi denediğiniz problemi burada anlıyorum. myobject s listeniz var. Her bir myobject, Names adı verilen bir HashSetstring s (yani, HashSet<string>) özelliğine sahiptir. Bazı myobject.Names’da görünen her bir string numarasının sayısını myobject.Names’da görmeniz gerekir. Yani üç myobject.Names olarak

"Alice", "Bob", "Charlie" 
"Alice", "Bob", "Donald" 
"Alice", "Donald", "Ernie" 

var olduğunu ve Eğer öyleyse

"Alice", 3 
"Bob", 2 
"Charlie", 1 
"Donald", 2 
"Ernie", 1 

görmek istiyorum:

var query = list.SelectMany(x => x.Names) 
       .GroupBy(s => s) 
       .Select(g => new { Name = g.Key, Count = g.Count() }); 

foreach(var result in query) { 
    Console.WriteLine("Name: {0}, Count: {1}", result.Name, result.Count); 
} 

Burada oynadığı rol ne myobject.ID görmüyorum. Lütfen hak kazanın.

+0

myobject.ID gerçekten bir rol oynamıyor, sadece basit bir HashSet nesnesi olmadığını açıkça göstermek istedim. –

+0

Tamam. Öyleyse yukarıdaki sorunun sizin sorunuza olduğuna inanıyorum. Bir şeyin açıklığa kavuşturulması gerekirse bana bildirin. – jason

+1

Örneğinizde GroupBy (s) var, ancak mevcut değil. –

5
var query = yourList 
      .SelectMany(x => x.Names) 
      .GroupBy(x => x, (y, z) => new { Name = y, Count = z.Count() }); 

// and to test... 
foreach (var item in query) 
{ 
    Console.WriteLine("{0} - {1}", item.Name, item.Count); 
} 
İlgili konular