2012-03-14 11 views
8

私は項目ごとに単一の文字がたくさん含まれている非常に単純なList<string>セットアップ(IE foreachが「A」「K」「P」などに出て慰めるだろう)がリスト<string>単純なグループとカウント?

私は何をしたいことができていますアイテムをグループ化してそれぞれの数をカウントすると、次のような出力が得られます。

a - 2 
t - 3 
y - 3 

これを行う最善の方法を教えてください。

私はそれが助けであれば.Net 4を使用しています。

答えて

32

(?各エントリは単一の文字であることを考えると、あなたは道でList<char>を持っていない何らかの理由がある)

方法について:これはやや非効率的であることを

// To get a Dictionary<string, int> 
var counts = list.GroupBy(x => x) 
       .ToDictionary(g => g.Key, g => g.Count()); 

// To just get a sequence 
var counts = list.GroupBy(x => x) 
       .Select(g => new { Text = g.Key, Count = g.Count() }); 

注意内部表現の面であなたは間違いなく "手動で"より効率的に行うことができますが、さらに多くの作業が必要になります。あなたのリストが大きければ、私はこれに固執します。

8

これを行う最も簡単な方法は、

var list = new[] { "a", "a", "b", "c", "d", "b" }; 
var grouped = list 
    .GroupBy(s => s) 
    .Select(g => new { Symbol = g.Key, Count = g.Count() }); 

foreach (var item in grouped) 
{ 
    var symbol = item.Symbol; 
    var count = item.Count; 
} 
2
var list = new[] {"a", "t", "t", "y", "a", "y", "y", "t"}; 
var result = (from item in list 
       group item by item into itemGroup 
       select String.Format("{0} - {1}", itemGroup.Key, itemGroup.Count())); 
を使用してLINQのです
関連する問題