2 つの配列があります。
[["106373", "106374", "106375", "106376"], ["106377", "106378", "220183", "220184"], ["220185", "220186", "220187", "220188"], ["220189", "220190", "106379"]]
[["106373", 15],
["106374", 16],
["106375", 17],
["106376", 18],
["106377", 19],
["106378", 20],
["106379", 77],
["220183", 38],
["220184", 39],
["220185", 40],
["220186", 41],
["220187", 42],
["220188", 43],
["220189", 44],
["220190", 76]]
私が必要とするのは、最初の配列と等しいが、項目が同じ値を持つ 2 番目の数値で置き換えられた配列を返すことです。期待される結果:
[[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]
select や map などのメソッドを使用して多くのループを試しましたが、成功しませんでした。
まず、検索を高速化するために 2 番目のリストをハッシュに変換します。次に、元のリストで Map を 2 回呼び出し、値を検索します。
lists = [["106373", "106374", "106375", "106376"], ["106377", "106378", "220183", "220184"], ["220185", "220186", "220187", "220188"], ["220189", "220190", "106379"]]
mapping = [
["106373", 15],
["106374", 16],
["106375", 17],
["106376", 18],
["106377", 19],
["106378", 20],
["106379", 77],
["220183", 38],
["220184", 39],
["220185", 40],
["220186", 41],
["220187", 42],
["220188", 43],
["220189", 44],
["220190", 76]
]
hash = mapping.to_h
p lists.map { |list| list.map { hash[_1] } }
出力:
[[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]
注: 値がマッピングに存在しない場合、結果の出力では nil が返されます。