如何获取符合特定条件的列表项的数量

本文关键字:特定条件 列表 何获取 获取 | 更新日期: 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。