首页 >后端开发 >C++ >如何在不迭代的情况下获取 IEnumerable 的计数?

如何在不迭代的情况下获取 IEnumerable 的计数?

Patricia Arquette
Patricia Arquette原创
2024-12-27 10:29:17288浏览

How Can I Get the Count of an IEnumerable Without Iterating Through It?

无需迭代即可枚举 IEnumerable:计数困境

使用 IEnumerable 时,基本原则是惰性求值,即仅在需要时才检索元素。然而,有时我们可能会发现自己处于这样一种情况:我们需要知道集合中项目的数量而不需要迭代它们。

考虑以下代码片段:

private IEnumerable<string> Tables
{
    get
    {
        yield return "Foo";
        yield return "Bar";
    }
}

如果我们想要迭代这个集合并将进度显示为“处理 #n of #m”,我们如何确定 m 的值而不需要迭代?

IEnumerable 的限制

不幸的是,这对于 IEnumerable 是不可能的。根据设计,它是惰性运行的,仅在请求时生成元素。预先确定总计数需要预先遍历,从而违背了惰性求值的目的。

ICollection 来救援

如果在不迭代的情况下知道计数至关重要,请考虑使用 ICollection 代替。 ICollection 是一个接口,表示可以提供有关其内容的信息的集合。它包含一个 Count 属性,用于返回集合中的元素数量。

private ICollection<string> Tables
{
    get
    {
        return new List<string> { "Foo", "Bar" };
    }
}

int count = Tables.Count;

通过将 Tables 转换为 List,我们可以访问 Count 属性并获取计数,而无需迭代。

总之,虽然 IEnumerable 因其在惰性计算方面的效率而引人注目,但它预先缺乏计数信息可能是一个限制。对于必须事先知道计数的情况,请考虑使用 ICollection。

以上是如何在不迭代的情况下获取 IEnumerable 的计数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn