我有很多相似名字的C#列表我想要计算所有个别相似的单词.
例
假设列表具有这些值
one,one,one,two,two,four,four,four
Run Code Online (Sandbox Code Playgroud)
然后我想像这样计算
one 3
two 2
four 3
Run Code Online (Sandbox Code Playgroud)
我如何从列表中计算这样的值.
我会在逗号上拆分字符串,循环遍历所有结果,并将每个单词添加到值为1的哈希表或字典中.如果单词(键)已存在,则递增该值.
string[] values = "one,one,one,two,two,four,four,four".Split(',');
var counts = new Dictionary<string, int>();
foreach (string value in values) {
if (counts.ContainsKey(value))
counts[value] = counts[value] + 1;
else
counts.Add(value, 1);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,这里是一个LINQ解决方案
var counts = values.GroupBy<string, string, int>(k => k, e => 1)
.Select(f => new KeyValuePair<string, int>(f.Key, f.Sum()))
.ToDictionary(k => k.Key, e => e.Value);
Run Code Online (Sandbox Code Playgroud)
这是基于Linq的解决方案:
string s = "one,one,one,two,two,four,four,four";
List<string> list = s.Split(',').ToList();
Dictionary<string, int> dictionary = list.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
foreach (var kvp in dictionary)
Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value);
Run Code Online (Sandbox Code Playgroud)
输出:
one: 3
two: 2
four: 3
Run Code Online (Sandbox Code Playgroud)
该解决方案没有利用共同值是连续的这一事实.如果情况总是这样,可以写一个稍微快一点的解决方案,但这对于短列表来说很好,或者如果项目可以按任何顺序排列.
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |