ホームページ >バックエンド開発 >C++ >LINQ を使用してコレクションのランダムなサブセットを効率的に取得するにはどうすればよいですか?

LINQ を使用してコレクションのランダムなサブセットを効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-06 03:17:42510ブラウズ

How Can I Efficiently Retrieve a Random Subset of a Collection Using LINQ?

シャッフルを使用したランダムなサブコレクションの効率的な取得

コレクションのランダムなサブセットを取得するという課題は、プログラミングにおいて頻繁に遭遇します。 LINQ はデータ コレクションを操作するための多彩なメカニズムを提供しており、開発者はランダム化されたサブセットを取得するための最適化されたアプローチを求めることがよくあります。

提案されたソリューション: Fisher-Yates-Durstenfeld Shuffle の実装

最適な 1 つこれを達成する方法は、フィッシャー-イェーツ-ダステンフェルド シャッフルを使用することです。この手法では、ソース コレクションからランダムな要素を繰り返し選択し、それをソートされていない最後の要素と交換し、各要素が選択される確率が等しいことを保証します。

拡張メソッドによる実装

LINQ の機能を強化するために、Shuffle と呼ばれる拡張メソッドが開発されました。フィッシャー-イェーツ-ダステンフェルドのシャッフル。このメソッドは IEnumerable 入力を受け入れ、シャッフルされたシーケンスを返します。さらに、カスタマイズのために Random インスタンスを渡すこともサポートしています。

実装には、ソース コレクションを List に変換することが含まれており、定数時間のランダム アクセスが保証されます。その後、要素が順番に交換されてランダムな順列が作成されます。

使用例

Shuffle 拡張メソッドを利用するには:

  1. 名前空間をインポートします。拡張機能が定義されている場所。
  2. ソース上で Shuffle メソッドを呼び出します。コレクション。
  3. 必要に応じて、カスタマイズ用のランダム インスタンスを指定します。
  4. 必要に応じて、結果のシャッフルされたシーケンスを使用します。

コード例

提供されたコード スニペットは、Shuffle 拡張機能を使用して、指定されたシャッフルされたサブコレクションを取得する方法を示しています。サイズ:

// take n random items from yourCollection
var randomItems = yourCollection.Shuffle().Take(n);

以上がLINQ を使用してコレクションのランダムなサブセットを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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