【问题标题】:Getting most occured string value using LINQ C#使用 LINQ C# 获取最常出现的字符串值
【发布时间】:2017-03-06 15:18:29
【问题描述】:

我有一个字符串列表,我按照它们在列表中的出现进行分组,如下所示(其中 key 是这些字符串的列表):

  mostCommonKeywords = key.GroupBy(v => v)
                            .OrderByDescending(g => g.Count()) // here I get the count number
                            .Select(g => g.Key)
                            .Distinct()
                            .ToList();

我现在要做的事情是当它们被排序时,我想得到它们的计数,因为LINQ可以清楚地区分它们的数量并排序它们......我怎样才能得到列表中每个字符串的计数出现现在???

编辑:

假设我有如下所示的计数值:

124
68
55
48
32
19
13
10

我不能像@octavioccl 建议的那样简单地将这个值的 1 添加到一个名为“Count”的变量中。我显然必须将它们存储到某种列表或其他东西中......

【问题讨论】:

  • 您不需要Distinct,因为GroupBy 的结果将是一组唯一键。还要让计数将其包含在 Select 中。

标签: c# asp.net linq list count


【解决方案1】:
from a in keys
group a by a.key into g
select new { a.Key, Count = g.Count() };

【讨论】:

  • 你的意思是group a by a into g 还有为什么要删除一个答案而只创建另一个基本相同的答案?
  • 这里重要的不是使用查询语法而不是方法语法,而是在选择中包含Count。但目前您的 group by 是错误的,因为 astring 并且没有 key 成员。
【解决方案2】:

使用Select 并在anonymous type 中投影:

 var result=key.GroupBy(v => v)
               .Select(g => new {g.Key, Count=g.Count()})
               .OrderByDescending(e => e.Count) 
            // .Distinct()// Don't need this call
               .ToList();

更新

您还可以使用 DTO 投影查询:

public class CustomDTO
{
  public string Key{get;set;} // Change the type in case you need to
  public int Count{get;set;}
}

因此,您的查询将是:

 var result=key.GroupBy(v => v)
               .Select(g => new CustomDTO{Key=g.Key, Count=g.Count()})
               .OrderByDescending(e => e.Count) 
               .ToList();

【讨论】:

  • 想象一下我有 500 个这样的......我需要的不仅仅是一个简单的变量来存储 1 个值。我们正在谈论 500 个不同的值,我需要将它们存储到一个清单或其他东西……你明白我想说什么吗? :)
  • 不是真的:(,你能用一个例子更新你的问题吗
  • @User987 您的编辑正是这个答案的作用。检查 .Key 变量
  • 天哪,看来你是对的......就是这样......顺便问一下,结果会是什么类型的?这显然不仅仅是一个通用列表?
  • 优秀优秀,这比我想象的还要好。谢了哥们!! :) 接受你的回答! :D
猜你喜欢
  • 1970-01-01
  • 2013-12-21
  • 2012-04-06
  • 2011-04-03
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多