You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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]

解释:

  1. arr.max_by { |sub_arr| sub_arr[2] }:遍历数组,以每个子数组的第三个元素为比较基准,返回第一个遇到的最大值对应的子数组(当前示例中是[1,4,12]);
  2. [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]](当前示例中仅一个符合条件的子数组)

解释:

  1. arr.map { |sub_arr| sub_arr[2] }.max:先提取所有子数组的第三个元素,再找出其中的最大值;
  2. arr.select { ... }:筛选出所有第三个元素等于最大值的子数组;
  3. map { ... }:对筛选后的子数组,逐个提取前两个元素,得到结果数组。

内容的提问来源于stack exchange,提问作者jbk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:52:22