我有两个数组:
[["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]]
我需要的是返回一个等于第一个数组的数组,但其中的项目被第二个中具有相同值的数字替换。预期结果:
[[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]
我使用 select 和 map 等方法尝试了很多循环,但没有成功。
首先,将第二个列表转换为哈希以加快查找速度。然后在原始列表上调用两次map并查找值:
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。