首頁 >後端開發 >C++ >如何在不迭代的情況下取得 IEnumerable 中的項目計數?

如何在不迭代的情況下取得 IEnumerable 中的項目計數?

DDD
DDD原創
2024-12-28 08:40:12499瀏覽

How to Get the Count of Items in an IEnumerable without Iteration?

從IEnumerable 檢索項目計數沒有迭代

考慮一個場景,您有一個IEnumerable;集合如下:

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

您想要迭代此集合並將進度顯示為「處理#n of #m」。有沒有一種方法可以在主迭代之前確定 m 的值?

瞭解 IEnumerable

預設情況下,IEnumerable 不允許直接擷取項目計數。其惰性求值本質意味著僅根據需要檢索元素。這種設計選擇是為了透過避免不必要的記憶體分配和處理來優化資源使用。

替代方案:使用 ICollection

如果您需要立即了解項目計數, IEnumerable 的替代方案是使用 ICollection。與 IEnumerable 不同,ICollection 提供了 Count 屬性,該屬性傳回集合中元素的數量。

public class TableCollection : ICollection<string>
{
    // Implementation details omitted for brevity

    public int Count => 2;
}

透過將 Tables 集合強制轉換為 ICollection;或使用像 List 這樣的通用集合,您可以存取 Count 屬性來檢索項目計數,而無需迭代。

結論

雖然 IEnumerable 提供惰性評估的好處是,它不直接支持項目計數檢索。若要立即存取計數,請考慮使用 ICollection 或更合適的提供此功能的資料結構。

以上是如何在不迭代的情況下取得 IEnumerable 中的項目計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn