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

如何检测二维数组的首个元素中是否存在指定值

二维数组子数组首元素检测与添加实现

你要实现的逻辑是:检查二维数组中是否存在首元素等于目标id的子数组,若不存在则将[id, 1]追加到数组中。之前一维数组的代码无法直接复用,因为二维数组的元素是子数组,直接调用include?会对比整个子数组,而非子数组的首个元素。

这里提供两种实用的实现方式:

方式一:直接遍历检测(适合小规模数组)

# 初始化示例二维数组
target_arr = [[2,5],[3,1],[4,1]]
check_id = 5 # 待测id

# 检测并添加
unless target_arr.any? { |sub| sub.first == check_id }
  target_arr << [check_id, 1]
end

any?方法会遍历数组中的每个子数组,判断其首元素是否等于目标id。只要存在匹配项,就跳过追加操作;反之则将[check_id, 1]加入数组。

方式二:预存首元素集合(适合大规模数组)

如果需要频繁执行这类检测,先提取所有子数组的首元素存入集合,能大幅提升查询效率:

target_arr = [[2,5],[3,1],[4,1]]
check_id = 2

# 提取所有子数组首元素到集合
existing_ids = target_arr.map(&:first).to_set

unless existing_ids.include?(check_id)
  target_arr << [check_id, 1]
end

map(&:first)会提取所有子数组的首个元素,转成Set后,include?的查询时间复杂度为O(1),比遍历数组的O(n)更高效。

为什么原一维数组代码不适用?

一维数组[:cart]的元素是单个值,include?(id)直接判断值是否存在;但二维数组的元素是子数组,原逻辑会尝试用include?(id)对比整个子数组与id,显然永远不匹配,导致每次都会执行追加操作,这就是问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:07:14