从列表中找到特定项目的数量

6

我有一个包含1000个名称的List<String>。我想知道以字母"S"开头的名称数量。

最好的选项是什么?


使用LINQ,它在Framework 2.0中不可用。int count = myList.Count(name => name.StartsWith("S")); - andy
你不可以写一个简单的代码来迭代列表、测试并计数吗?这个问题花费的时间,你不觉得有点浪费吗? - Martin James
5个回答

14

如果可用,使用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++;
}

4
使用linq可以简化此过程。
var count = list.Where(x => x != null && x.StartsWith("S")).Count();

@Rawling,不,可能还有一种方法,但我选择使用属性。 - Ash Burlaczenko
2
@AshBurlaczenko:不,List<T>有这个属性,但是list.Where返回的是IEnumerable<T> - Tim Schmelter

1
int k = 0;
foreach (string aName in yourStringList)
{
  if (aName.StartsWith("S"))
    {
    k++
    }
}

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


虽然可以使用 Linq,+1 - Lews Therin
@BobVale:你不是缺少一个“评论所有”按钮吗?;-) - Tim Schmelter
我认为“I have a List<String> with 1000 names”意味着项目具有值,并为Vishnu提供了最简单的解决方案以理解该点。如果aName为空,则应用程序应抛出异常。如果不希望出现这种行为,if语句应为(aName != null && aName.StartsWith("S"))。 - Dejo
1
List<String>有1000个名称”并不意味着所有项目都必须有值。只有 OP 能告诉我们。 - Tim Schmelter
你是对的,所以如果Vishnu希望应用程序在存在空值项目时不会抛出异常,应该添加aName!= null。 - Dejo

1
如果您可以访问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")。)
这段内容与IT有关。

c甚至没有定义:p 是的,我从你的回答中注意到了这一点,但我想在括号内进行编辑并将其归功于你,而不是只是窃取它。 - Rawling

0
List<string> list = new List<string>();
...
int count = list.Count(c =>  c!= null && c.StartsWith("S"));

@BobVale C怎么可能为null,它是一个字符串泛型列表的元素。 - Nikola Davidovic
@BobVale 我已经测试过了,你说得很好,我不知道这是可能的。我会编辑答案,谢谢。 - Nikola Davidovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接