【问题标题】:Finding count of particular items from a list从列表中查找特定项目的计数
【发布时间】:2012-10-16 09:51:20
【问题描述】:

我有一个List<String>,有 1000 个名字。我想找出以字母“S”开头的名字的数量。

最好的选择是什么?

【问题讨论】:

  • 使用 LINQ,它在 Framework 2.0 中不可用 int count = myList.Count(name => name.StartsWith("S"));
  • 难道您不能编写代码来简单地迭代列表、测试并记录编写此问题所花费的时间吗?

标签: c#


【解决方案1】:

如果 Linq 可用

using System.Linq;
list.Where(s=>s!=null && s.StartsWith("S")).Count();

如果 Linq 不可用。

int count=0;
foreach (string s in list) {
  if (s!=null && s.StartsWith("S")) count++;
}

【讨论】:

    【解决方案2】:

    使用 linq 让这一切变得简单

    var count = list.Where(x => x != null && x.StartsWith("S")).Count();
    

    【讨论】:

    • @Rawling,不,可能还有一种方法,但我选择使用该属性。
    • @AshBurlaczenko: 不,List<T> 有这个属性,但没有IEnumerable<T>list.Where 返回。
    【解决方案3】:

    如果你可以访问 LINQ,类似

    int count = myList.Count(name => name.StartsWith("S"));
    

    否则,类似

    int count = myList.FindAll(name => name.StartsWith("S")).Count;
    

    (编辑:正如 Bob Vale 在他的回答中指出的那样,如果您的任何列表条目可能为空,您需要添加一个空检查,例如 name => name != null && name.StartsWith("S")。)

    【讨论】:

    • c 甚至没有被定义:p 是的,我从你的回答中注意到了这一点,但我认为我会在括号编辑中将它归功于你,而不是仅仅窃取它。
    【解决方案4】:
    int k = 0;
    foreach (string aName in yourStringList)
    {
      if (aName.StartsWith("S"))
        {
        k++
        }
    }
    

    k 将拥有以“S”开头的名称数量

    【讨论】:

    • 虽然可以使用Linq,但是+1
    • @BobVale:您缺少comment-to-all 按钮,不是吗? ;-)
    • 我认为“我有一个包含 1000 个名称的 List”意味着项目具有值 - 并为 Vishnu 提供了最简单的解决方案来理解这一点。如果 aName 为 null 应用程序应该抛出异常。如果这是不受欢迎的行为,如果句子应该是 (aName != null && aName.StartsWith("S"))
    • "List<String> with 1000 names'" 并不意味着所有项目都必须有一个值。只有 OP 可以告诉我们。
    • 你是对的,所以,如果 Vishnu 希望应用程序在存在具有 null 值的项目时不会抛出异常,则应添加 aName != null。
    【解决方案5】:
    List<string> list = new List<string>();
    ...
    int count = list.Count(c =>  c!= null && c.StartsWith("S"));
    

    【讨论】:

    • @BobVale c怎么可以为null,它是一个通用字符串列表的元素
    • @BobVale 我已经测试过了,很好,不知道我会编辑答案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多