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

反復せずに IEnumerable 内の項目数を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-28 08:40:12482ブラウズ

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";
    }
}

このコレクションを反復処理し、進行状況を「#m 中の #n を処理中」として表示したいとします。メインの反復の前に反復せずに 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。