我有很多相似名字的C#列表我想要计算所有相似的单词。
实施例
假设列表具有这些值
one,one,one,two,two,four,four,four
然后我想像这样计算
one 3
two 2
four 3
如何从列表中计算出这样的值。
答案 0 :(得分:9)
我会在逗号上拆分字符串,循环遍历所有结果,并将每个单词添加到值为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);
}
或者,如果您愿意,这里是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);
答案 1 :(得分:7)
以下是基于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);
输出:
one: 3
two: 2
four: 3
此解决方案没有利用公共值是连续的这一事实。如果情况总是如此,可以写一个稍微快一点的解决方案,但这对短列表来说很好,或者如果项目可以按任何顺序排列。
答案 2 :(得分:0)
Dictionaty<string, int> listCount = new Dictionaty<string, int>();
for (int i = 0; i < yourList.Count; i++)
{
if(listCount.ContainsKey(yourList[i]))
listCount[yourList[i].Trim()] = listCount[yourList[i].Trim()] + 1;
else
listCount[yourList[i].Trim()] = 1;
}
答案 3 :(得分:0)
对于List,您可以执行以下操作(未经测试):
List<string> list = new List<string>()
{
"One",
"One",
"Two",
// etc
}
Dictionary<string, int> d = new Dictionary<string, int>();
foreach (string s in list)
{
if (d.ContainsKey(s))
d.Add(s, 1);
else
d[s]++;
}
首选(和更干净)方法是使用GroupBy和Count with Linq来完成此操作,但我目前没有输入语法的类型。
祝你好运!