コレクション内のすべての値を反復することなく、特定のパターン/命名規則に関連する NameValueCollection からキーを引き出す方法はありますか?
3 に答える
名前値コレクションは、そのような検索で特に効率的になるようには設計されていません。どの方法を使用しても、すべての項目を通過する必要があります。LINQ を使用できます。何かのようなもの:
col.Keys.OfType<string>().Where(s => s.StartsWith("SomeString"))
regex と linq マジックを組み合わせて実行できる場合もありますが、最終的には、すべての値を反復処理してチェックする必要があります。linq を使用する場合、繰り返しを記述する必要はありませんが、内部では実行されます。
これよりもさらに高速化する必要がある場合は、どのようなパターン/命名規則を使用しているかを確認し、それらのニーズに合わせて検索可能なデータ構造を作成する必要があります。
2 つのコメント:
1) あなたの質問は漠然としすぎています。接尾辞と接頭辞の試行、赤黒木のバリアントなど、効率的な検索をサポートするさまざまなデータ構造があります。あなたの質問に対する有用な答えは、探しているパターン/命名規則の種類によって異なります。いくつかのサンプル入力と期待される出力を投稿してください。
2) 本当に必要でない限り、複雑なデータ構造を実装しても意味がありません。自問すべき最初の質問は、本当に効率が必要かどうかです: 50,000 個未満のアイテムを含むコレクションの場合、メモリ、CPU、またはパフォーマンスに知覚可能な違いが見られるとは思えません。線形検索。