如何获取符合特定条件的列表项的数量
本文关键字:特定条件 列表 何获取 获取 | 更新日期: 2023-09-27 18:28:08
例如,我需要列表项的数量,它们不是"。ATM,我这样解决:
public int getRealCount()
{
List<string> all = new List<string>(originList);
int maxall = all.Count;
try
{
for (int i = 0; i < maxall; i++)
{
all.Remove("");
}
}
catch { }
return all.Count;
}
毫无疑问,表现相当糟糕。我很幸运,这只是一个10项清单,但在手机上你应该避免这样的代码。
所以我的问题是,我该如何改进这个代码?
其中一个想法是:可能已经有了一种方法。第二种方法是:所有项都只能填充非"的项。
我应该如何解决这个问题?
感谢
听起来像你想要的:
return originList.Count(x => x != "");
根本不需要创建集合的副本。请注意,在源代码开头的using指令中需要using System.Linq;
。
(请注意,您不应该有这样的空catch块-以这种方式抑制异常是可怕的想法。只有当您想真正处理它们或想重新将它们包装为另一种类型时,才捕获异常。如果必须忽略异常,您至少应该将其记录在某个位置。)
如果性能是您关心的问题,那么您应该保留一个仅用于这些项的集合。
如果性能不是什么大问题,我建议您对集合使用Linq查询。Linq最酷的地方是搜索会延迟到你需要的时候
int nonEmptyItemCount = originList.Count(str => !string.IsNullOrEmpty(str));
你也可以做
int nonEmptyItemCount = originList.Count(str => str != "");
您应该使用LINQ。安装ReSharper,它会为您生成它。
另外,不要创建int maxall=all。计数,然后在for循环中使用它。
对于移动应用程序,你不应该使用不必要的内存,所以只需要使用所有内存。在for循环中计数。
您正在为列表all中的每一项调用all.remove(")。为什么不叫一次呢?你的代码中根本没有使用i。。。
为什么不:
public int getRealCount()
{
List<string> all = new List<string>(originList);
int erased =all.RemoveAll(delegate(string s)
{
return s == "";
});
return all.Count - erased;
}
更新:
修正了我的问题。这没有lambda。