SORU
2 EYLÜL 2011, Cuma


seri groupby ve sayısı ile

Bu oldukça basit ama kararsızım: Veri kümesi: bu tür verildi

UserInfo(name, metric, day, other_metric)

ve bu örnek veri kümesi:

joe  1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim  3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb  0 01/07/2011 3
jenn 0 01/08/2011 7

Sırayla ölçümü(0,1,2,3..) listeleyen bir tablo almak için Kont oluşur kez sayısı ile istiyorum. Bu set ile bitirmek istiyorum:

0 3    
1 2    
2 2    
3 1

SERİ sözdizimi ile boğuşuyor ama groupby ve sayısı koymak için yere takıldım ben.... herhangi bir yardım??

POST Edit: asla gönderildi cevaplar hep farklı sayısı ile bir rekor iade olarak iş bulabildim. Ancak birlikte iş yaptığı örnek SQL için bir SERİ koymayı başardım:

        var pl = from r in info
                 orderby r.metric    
                 group r by r.metric into grp
                 select new { key = grp.Key, cnt = grp.Count()};

Bu sonuç beni 'ölçümleri' ve kullanıcılar ile ilgili her sayısını. kayıtları sıralı bir set verdi Genel olarak SERİ açıkça yeniyim ve benim eğitimsiz göz için bu yaklaşım, saf ETMENİZ yaklaşımına çok benzer görünüyor yine de bana farklı bir cevap verdi.

CEVAP
2 EYLÜL 2011, Cuma


Sonra arama GroupBy, serinin grupları IEnumerable<Grouping>, Her Gruplandırma kendini gösterir Key kullanılan oluşturmak için Grup ve aynı zamanda bir IEnumerable<T> her öğe içinde orijinal veri kümesi. Sadece onu Count() alt toplam almak için Gruplandırma aramak zorunda.

foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric)
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}

< / ^ hr .

Ama bu ilk satır, "veri.özellikle ile ilgili bir sorun biraz yaşıyorum zekice hızlı bir cevap oldu(bilgi=>groupby bilgi.metrik)"

Zaten/gibi görünüyor class bazı dizi listesi var sanıyorum

class UserInfo {
    string name;
    int metric;
    ..etc..
} 
...
List<UserInfo> data = ..... ;

Yapmak data.GroupBy(x => x.metric), "demek için her öğe x IEnumerable tarafından tanımlanan data hesaplamak .metric, sonra da tüm grup elemanları ile aynı metrik Grouping dönüş IEnumerable tüm elde edilen gruplar. Örnek veri seti verildi

    <DATA>           | Grouping Key (x=>x.metric) |
joe  1 01/01/2011 5  | 1
jane 0 01/02/2011 9  | 0
john 2 01/03/2011 0  | 2
jim  3 01/04/2011 1  | 3
jean 1 01/05/2011 3  | 1
jill 2 01/06/2011 5  | 2
jeb  0 01/07/2011 3  | 0
jenn 0 01/08/2011 7  | 0

groupby sonra şu sonuç ortaya çıkar:

(Group 1): [joe  1 01/01/2011 5, jean 1 01/05/2011 3]
(Group 0): [jane 0 01/02/2011 9, jeb  0 01/07/2011 3, jenn 0 01/08/2011 7]
(Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]
(Group 3): [jim  3 01/04/2011 1]

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007
  • TokShogun

    TokShogun

    6 HAZİRAN 2009