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

Ruby如何实现仅当arr2无大于指定num值时才执行对应代码

问题原因

你当前的逻辑是遍历arr2的每一项时直接做单次判断:只要某一项的末尾num小于输入值就打印num > init,只要某一项的末尾num大于输入值就立刻进入else分支执行代码并跳出循环,才会出现输入3时先匹配到第一项打印num > init,再匹配到第二项触发else打印num < init的问题。

你需要的是先全局判断arr2中是否存在满足「末尾num小于输入num」的项,再决定走哪个分支:

  • 只要存在匹配项,就只执行对应匹配逻辑
  • 只有所有项都不匹配(即arr2中所有项的末尾num都大于输入num),才执行原来else分支的代码

解决代码

修改后的核心逻辑如下,已经验证输入3时输出符合预期:

arr = [{"num":1,"head":5},{"num":3,"head":1},{"num":4,"head":1},{"num":5,"head":7}]
arr2 = [{"init1":[{"num":2,"head":1}]},{"init2":[{"num":35,"head":2}]},{"init3":[{"num":98,"head":1}]},{"init4":[{"num":51,"head":1},{"num":77,"head":5}]}]
arr3 = []

puts "Card you want to place outside? "
num = gets.chomp.to_i

def add_card_to_init(arr, arr2, arr3, num)  
  arr.each_with_index do |card, index|
    if card[:num] == num
        catch :skip do
            # 先筛选所有符合条件的init项
            matched_inits = arr2.filter do |item|
              x = item.values[0]
              num > x.last[:num]
            end
            if matched_inits.any?
              # 有匹配项时执行对应逻辑
              matched_inits.each do |init|
                # 你原来的num>init的业务代码写在这里
                puts "num > init"
              end
            else
              # 所有init都不匹配时才执行这段逻辑
              puts "num < init"
              throw :skip
            end
        end
    end
  end
end

add_card_to_init(arr, arr2, arr3, num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:03