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
相关产品推荐
相关产品推荐

