C# 如何在列表中统计相似单词?

C# 如何在列表中统计相似单词?,c#,asp.net,C#,Asp.net,我有一个C#列表,上面有很多相似的名字,我想数一数所有相似的单词 范例 假设列表中有这些值 one,one,one,two,two,four,four,four 然后我想这样计算 one 3 two 2 four 3 如何从列表中计算这样的值。我会用逗号分割字符串,循环遍历所有结果,并将每个单词添加到哈希表或字典中,使其值为1。如果单词(键)已存在,则增加该值 string[] values = "one,one,one,two,two,four,four,four".Split(',')

我有一个C#列表,上面有很多相似的名字,我想数一数所有相似的单词

范例

假设列表中有这些值

one,one,one,two,two,four,four,four
然后我想这样计算

one 3
two 2
four 3 

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

我会用逗号分割字符串,循环遍历所有结果,并将每个单词添加到哈希表或字典中,使其值为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);
}
string[]values=“一,一,一,二,二,四,四,四”。拆分(',');
var counts=新字典();
foreach(值中的字符串值){
if(计数。容器(值))
计数[值]=计数[值]+1;
其他的
计数。添加(值,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);  
var counts=values.GroupBy(k=>k,e=>1)
.Select(f=>newkeyvaluepair(f.Key,f.Sum()))
.ToDictionary(k=>k.Key,e=>e.Value);

我会用逗号分割字符串,循环遍历所有结果,并将每个单词添加到哈希表或字典中,值为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);
}
string[]values=“一,一,一,二,二,四,四,四”。拆分(',');
var counts=新字典();
foreach(值中的字符串值){
if(计数。容器(值))
计数[值]=计数[值]+1;
其他的
计数。添加(值,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);  
var counts=values.GroupBy(k=>k,e=>1)
.Select(f=>newkeyvaluepair(f.Key,f.Sum()))
.ToDictionary(k=>k.Key,e=>e.Value);
词典列表计数=新建词典();
for(int i=0;i
词典列表计数=新建词典();
for(int i=0;i
以下是一个基于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);

这种解决方案没有利用公共值是连续的这一事实。如果总是这样的话,可以编写一个稍微快一点的解决方案,但对于短列表或项目可以按任意顺序出现,这也没问题。

以下是一个基于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);

这种解决方案没有利用公共值是连续的这一事实。如果总是这样,则可以编写一个稍微快一点的解决方案,但对于短列表或项目可以按任意顺序排列,则可以这样做。

对于列表,您可以执行以下操作(未经测试):

List List=新列表()
{
“一个”,
“一个”,
“两个”,
//等
}
字典d=新字典();
foreach(列表中的字符串s)
{
如有(丁)
d、 增加(s,1);
其他的
d[s]++;
}
首选的(也是更干净的)方法是使用GroupBy和Count与Linq一起实现这一点,但我目前没有键入语法的类型


祝你好运

对于列表,您可以执行以下操作(未经测试):

List List=新列表()
{
“一个”,
“一个”,
“两个”,
//等
}
字典d=新字典();
foreach(列表中的字符串s)
{
如有(丁)
d、 增加(s,1);
其他的
d[s]++;
}
首选的(也是更干净的)方法是使用GroupBy和Count与Linq一起实现这一点,但我目前没有键入语法的类型


祝你好运

它们保证是逗号分隔的吗?它们保证是逗号分隔的吗?您需要为值X-)添加修剪,尽管我个人会使用counts[value]++;您需要为值X-)添加修剪,尽管我个人会使用counts[value]++;哎哟,你错过了比赛!符号。哎呀,你错过了!象征。