如何用Ruby处理嵌套数组:找出指定索引最大值及对应元素
问题:从嵌套数组中提取最大值对应的前两个元素
给定嵌套数组:
arr = [ [1, 2, 3], [1, 3, 6], [1, 4, 12], [1, 5, 5], [1, 2, 3], [1, 8, 7], [2, 3, 3], [2, 4, 9], [2, 5, 2], [2, 8, 4], [3, 4, 6], [3, 8, 1], [5, 8, 2], [2, 8, 4], [7, 8, 9] ]
需要实现:
- 找出所有子数组中**第三个元素(索引[2])**的最大值;
- 返回包含该最大值的子数组的前两个元素(索引[0]和[1])。
解决方案
情况1:仅需第一个出现的最大值对应的前两个元素
用max_by方法可以一步到位,简洁高效:
# 直接获取结果 result = arr.max_by { |sub_arr| sub_arr[2] }[0..1] # => [1, 4]
解释:
arr.max_by { |sub_arr| sub_arr[2] }:遍历数组,以每个子数组的第三个元素为比较基准,返回第一个遇到的最大值对应的子数组(当前示例中是[1,4,12]);[0..1]:提取该子数组的前两个元素,得到最终结果。
情况2:需所有最大值对应的前两个元素
如果存在多个子数组的第三个元素等于最大值,可分两步处理:
# 先获取最大值 max_val = arr.map { |sub_arr| sub_arr[2] }.max # 筛选出所有符合条件的子数组,并提取前两个元素 results = arr.select { |sub_arr| sub_arr[2] == max_val }.map { |sub_arr| sub_arr[0..1] } # => [[1, 4]](当前示例中仅一个符合条件的子数组)
解释:
arr.map { |sub_arr| sub_arr[2] }.max:先提取所有子数组的第三个元素,再找出其中的最大值;arr.select { ... }:筛选出所有第三个元素等于最大值的子数组;map { ... }:对筛选后的子数组,逐个提取前两个元素,得到结果数组。
内容的提问来源于stack exchange,提问作者jbk
相关产品推荐
相关产品推荐

