根据另外两个生成数组

问题描述 投票:0回答:1

我有两个数组:

[["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 等方法尝试了很多循环,但没有成功。

arrays ruby
1个回答
0
投票

首先,将第二个列表转换为哈希以加快查找速度。然后在原始列表上调用两次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。

© www.soinside.com 2019 - 2024. All rights reserved.