ホームページ > バックエンド開発 > C++ > IEnumerable を反復せずにカウントを取得するにはどうすればよいですか?

IEnumerable を反復せずにカウントを取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-27 10:29:17
オリジナル
285 人が閲覧しました

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";
    }
}
ログイン後にコピー

If weこのコレクションを反復処理し、進行状況を「#m中#nを処理中」として表示したいのですが、何もせずにmの値を決定するにはどうすればよいですか? iterating?

IEnumerable の制限

残念ながら、これは IEnumerable では不可能です。設計上、これは遅延して動作し、要求された場合にのみ要素を生成します。合計カウントを事前に決定するには事前のトラバーサルが必要となり、遅延評価の目的が無効になります。

ICollection to the Rescue

反復せずにカウントを知ることが重要な場合は、次のことを考慮してください。代わりに ICollection を使用します。 ICollection は、コレクションの内容に関する情報を提供できるコレクションを表すインターフェイスです。これには、コレクション内の要素の数を返す Count プロパティが含まれています。

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

int count = Tables.Count;
ログイン後にコピー

Table を List にキャストすることで、Count プロパティにアクセスし、反復せずにカウントを取得できます。

結論として、IEnumerable は遅延評価の効率性で優れていますが、事前にカウント情報が欠如していることが制限となる可能性があります。事前にカウントを把握することが不可欠なシナリオでは、代わりに ICollection の使用を検討してください。

以上がIEnumerable を反復せずにカウントを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート