シャッフルを使用したランダムなサブコレクションの効率的な取得
コレクションのランダムなサブセットを取得するという課題は、プログラミングにおいて頻繁に遭遇します。 LINQ はデータ コレクションを操作するための多彩なメカニズムを提供しており、開発者はランダム化されたサブセットを取得するための最適化されたアプローチを求めることがよくあります。
提案されたソリューション: Fisher-Yates-Durstenfeld Shuffle の実装
最適な 1 つこれを達成する方法は、フィッシャー-イェーツ-ダステンフェルド シャッフルを使用することです。この手法では、ソース コレクションからランダムな要素を繰り返し選択し、それをソートされていない最後の要素と交換し、各要素が選択される確率が等しいことを保証します。
拡張メソッドによる実装
LINQ の機能を強化するために、Shuffle と呼ばれる拡張メソッドが開発されました。フィッシャー-イェーツ-ダステンフェルドのシャッフル。このメソッドは IEnumerable 入力を受け入れ、シャッフルされたシーケンスを返します。さらに、カスタマイズのために Random インスタンスを渡すこともサポートしています。
実装には、ソース コレクションを List に変換することが含まれており、定数時間のランダム アクセスが保証されます。その後、要素が順番に交換されてランダムな順列が作成されます。
使用例
Shuffle 拡張メソッドを利用するには:
コード例
提供されたコード スニペットは、Shuffle 拡張機能を使用して、指定されたシャッフルされたサブコレクションを取得する方法を示しています。サイズ:
// take n random items from yourCollection var randomItems = yourCollection.Shuffle().Take(n);
以上がLINQ を使用してコレクションのランダムなサブセットを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。