【问题标题】:I want to know the count of each item in a list我想知道列表中每个项目的计数
【发布时间】:2015-11-20 13:15:11
【问题描述】:

所以,我有一个投票名单。

List<string> Votes = new List<string>();

最多三个不同的字符串。我想数一数。这是在 C# 中。

我查看了之前的问题,但没有发现任何类似问题,但问题比我的要复杂得多。 对不起,如果这已经回答了

【问题讨论】:

  • 您能否给我们一些您的代码,以帮助我们了解您的问题并为您提供帮助?
  • List Stemmen = new List();我正试图从中获得所有不同的选票。所以就像 5 人投票给百事可乐,3 人投票给可口可乐,5 人无动于衷
  • @JulesVerdonck 如果您的意思是new List&lt;string&gt;();,您实际上应该在您的问题中显示它。细节很重要。
  • 我强烈建议阅读How To Ask pagehelp center 中的其他主题。您的问题现在的措辞方式我们无法真正确定问题所在。并且:欢迎来到 SO!不要让这吓到你! :-)
  • 您应该更新您的问题以准确说明这一点,而不是发布图片。尽管您已经使用 GroupBy 得到了几个有效的答案。

标签: c# list count


【解决方案1】:

呃,Linq 像那样?:

  List<String> votes = new List<String>() {
    "Yes", "No", "Yes", "No", "?"
  };
  ...
  String report = String.Join(Environment.NewLine, votes
    .GroupBy(item => item)
    .Select(chunk => String.Format("{0} votes, count {1}", chunk.Key, chunk.Count())) 
  );

  Console.Write(report); 

【讨论】:

    【解决方案2】:

    你可以使用GroupBy:

    var voteGroups = Votes.GroupBy(s => s);
    

    现在,如果您想知道每个 string 的计数,请使用 Enumerable.Count

    foreach(var voteGroup in voteGroups)
        Console.WriteLine("Vote:{0} Count:{1}", voteGroup.Key, voteGroup.Count());
    

    另一种方式是使用ToLookup

    var voteLookup = Votes.ToLookup(s => s);
    foreach (var voteGroup in voteLookup)
        Console.WriteLine("Vote:{0} Count:{1}", voteGroup.Key, voteGroup.Count());
    

    查找有它的优点,它使您能够像字典一样查找特定元素。因此,您可以通过这种方式获得“百事可乐”计数:

    int pepsiCount = voteLookup["Pepsi"].Count();
    

    如果列表中没有这样的字符串,这不会导致异常(计数将为0)。

    如果你想让它不区分大小写,那么将 "pepsi" 和 "Pepsi" 视为相同:

    var voteLookup = Votes.ToLookup(s => s, StringComparer.InvariantCultureIgnoreCase);
    

    【讨论】:

      【解决方案3】:

      如果您只有strings 中的List,那么您可以只使用Count 属性。

      List<string> Votes = new List<string>();
      // populate list here
      Console.WriteLine(Votes.Count);
      

      【讨论】:

      • Count() 是 IEnumerable 的扩展,所以也可以。
      • 无论如何 OP 想要列表中不同项目的计数。
      • @ArthurRey 可能,但恕我直言,OP 尚未明确说明。
      • @ArthurRey 从问题目前的写法来看,这听起来像是一个List,最多包含三个值,他想知道List 中有多少个值时间。
      • @Nik 如果您查看 OP 刚刚发布的图片链接,我认为这更清楚地表明 Arthur 是对的。
      【解决方案4】:

      试试这个……

      var l = new List();
      l.Add("abcd");
      l.Add("abcd123");
      l.Add("abcd1234");
      
      var d = l.ToDictionary<string,int>(k=>k, v=>v.Length);
      
      var count = d["abcd"]; //result would be 4.
      

      【讨论】:

      • 这告诉你每个字符串有多少个字符。如果列表中有重复的字符串会抛出异常,这里就是这种情况。
      【解决方案5】:

      如果您只是想获取列表中唯一项目的总数:

      int count = (from x in lst select x).Distinct().Count();
      

      【讨论】:

      • 首先,这不是 OP 想要的,请参阅投票赞成的答案。此外,你为什么不直接做lst.Distinct().Count()
      【解决方案6】:

      不是最好的代码,但它可以工作:

      int count1 = 0;
      int count2 = 0;
      foreach (String answer in Votes)
      {
        if (answer == "yes")
        {
          count1++;
        }
        if (answer == "no")
        {
          count2++;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        相关资源
        最近更新 更多