Ruby中普通数组与多维数组值对比获取对应索引的实现
实现方案
核心思路是先将arr2的嵌套结构展平,过滤掉arr1中不存在的元素后,再批量获取对应索引即可。
基础易读版写法
arr1 = [1,2,3,4,5,6] arr2 = [[2,4],12] # 展平arr2的嵌套结构,筛选出arr1中存在的目标值 target_values = arr2.flatten.select { |val| arr1.include?(val) } # 遍历目标值获取对应索引 result = target_values.map { |val| arr1.index(val) } p result # 输出 [1, 3]
单行简写版
arr1 = [1,2,3,4,5,6] arr2 = [[2,4],12] result = arr2.flatten.filter_map { |val| arr1.index(val) if arr1.include?(val) } p result # 输出 [1, 3]
注意事项
- 如果
arr1中存在重复元素,index方法只会返回第一个匹配元素的索引,符合示例场景的预期 - 默认
flatten会展开所有层级的嵌套数组,如果仅需要展开指定层数,可以传入层级参数,例如flatten(1)仅展开第一层嵌套
内容的提问来源于stack exchange,提问作者George Barda
相关产品推荐
相关产品推荐

