如何计算列表中的相似单词?

Pan*_*hra 1 c# asp.net

我有很多相似名字的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)

我如何从列表中计算这样的值.

Bob*_*Bob 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);
}
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)

  • 虽然我个人会使用count [value] ++; (2认同)

Mar*_*ers 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);
Run Code Online (Sandbox Code Playgroud)

输出:

one: 3
two: 2
four: 3
Run Code Online (Sandbox Code Playgroud)

该解决方案没有利用共同值是连续的这一事实.如果情况总是这样,可以写一个稍微快一点的解决方案,但这对于短列表来说很好,或者如果项目可以按任何顺序排列.