それで、これが取引です。(私の現在のユースケースは C# ですが、一般的なアルゴリズムのケースにも興味があります) オブジェクトの 2 つの配列が与えられます (残念ながら、これらの配列を作成するコードを変更することはできません)。各オブジェクトには (その一部として) .Name プロパティ、つまり文字列があります。これらの文字列はオブジェクトごとに一意であり、他のオブジェクトに一致する文字列が 0 個または 1 個あります。私がする必要があるのは、その文字列に基づいてこれらのオブジェクトを効率的にペアリングし、ペアリングされたオブジェクトにアクセスできる何らかのコレクションにすることです。一致と見なされるには文字列が正確に一致する必要があるため、Upper や CaseInsensitive などは必要ありません。残念ながら、これらのリストはソートされていません。リスト自体はおそらく 30 ~ 50 個のアイテムですが、これらの数千の配列ペアに対してアルゴリズムを繰り返し実行する必要があるため、効率が重要です。
0 または 1 つの一致があることがわかっており、それらのほとんどが 1 つの一致になることがわかっているので、x*y (x の foreach アイテム、y の foreach アイテム、x=y の場合) よりも効率的なアルゴリズムがあるように感じます。 x と y は一致します)
最も可能性の高いオプションは次のとおりだと思います。
並べ替えられていないリストを保持し、x*y を実行しますが、アイテムが見つかったらリストから削除するため、既に見つかったアイテムはチェックしません。OR: 両方を辞書に変換し、それぞれに対してインデックス付きルックアップを実行します (array2 [currentArray1Item]) OR: リストを自分で並べ替え (Array.Sort())、並べ替えられた配列を使用して、B のインデックスにジャンプするなどの賢い操作を行うことができます (A のどこにいても) )そして、文字列が見つかるか、あるべき場所を通過するまで、文字列に基づいて上下に移動します。
それが完了したら、それを格納する方法を理解する必要があります。オブジェクト A と B だけを保持するカスタム ObjectPair クラスを作成できると思います。ペアで ForEach を実行するだけなので、ここでは特別なことをする必要はありません。 .
質問は次のとおりです。上記のアルゴリズムのいずれかがこれを行うための最速の方法ですか (そうでない場合は何ですか?)、見つかったペアを便利に保持する既存の C# 構造はありますか?
編集: Array.Sort() は存在するメソッドであるため、配列を List に変換して並べ替える必要はありません。知っておくと良い。上記を更新しました。