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

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

Patricia Arquette
發布: 2024-12-27 10:29:17
原創
328 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板