私は項目ごとに単一の文字がたくさん含まれている非常に単純なList<string>
セットアップ(IE foreach
が「A」「K」「P」などに出て慰めるだろう)がリスト<string>単純なグループとカウント?
私は何をしたいことができていますアイテムをグループ化してそれぞれの数をカウントすると、次のような出力が得られます。
a - 2
t - 3
y - 3
これを行う最善の方法を教えてください。
私はそれが助けであれば.Net 4を使用しています。
私は項目ごとに単一の文字がたくさん含まれている非常に単純なList<string>
セットアップ(IE foreach
が「A」「K」「P」などに出て慰めるだろう)がリスト<string>単純なグループとカウント?
私は何をしたいことができていますアイテムをグループ化してそれぞれの数をカウントすると、次のような出力が得られます。
a - 2
t - 3
y - 3
これを行う最善の方法を教えてください。
私はそれが助けであれば.Net 4を使用しています。
(?各エントリは単一の文字であることを考えると、あなたは道で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() });
注意内部表現の面であなたは間違いなく "手動で"より効率的に行うことができますが、さらに多くの作業が必要になります。あなたのリストが大きければ、私はこれに固執します。
これを行う最も簡単な方法は、
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;
}
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のです