ruby - Ruby map 中的排除项

标签 ruby dictionary filter

如何在 Ruby 中为数组映射创建排除项。 这是我想要实现的目标,

a = [1,2,3,4]
b = [5,6,7,8]
a.map.each do |x|
  b.map.each do |y|
    if !(x == 1 && y == 7)
      puts "#{x} and #{y}"
    elsif !(x == 4 && y == 8)
      puts "#{x} and #{y}"
    end
  end
end

1 and 5
1 and 6
1 and 7 # still here
1 and 8
2 and 5
2 and 6
2 and 7
2 and 8
3 and 5
3 and 6
3 and 7
3 and 8
4 and 5
4 and 6
4 and 7
4 and 8 # still here

但是,它不起作用,如何为这些正在被 map 处理的值添加异常?此外,如果可以使用具有相同目标的注入(inject)/拒绝/过滤功能。

最佳答案

要解释为什么 1 和 7 仍在打印,请逐步执行逻辑:

  1. if !(x == 1 && y == 7)
    • x == 1为真,y == 7为真,所以!(true && true)为假,这是跳过。
  2. elsif !(x == 4 && y == 8)
    • if 被跳过,所以 elsif 被评估。 x == 4 为假(因为 x 仍然为 1)并且 y == 8 为假(因为 y 仍然为 7)。因此,!(false && false)为真,到达puts

因为 x 永远不可能同时是 1 和 4 而 y 永远不可能同时是 7 和 8,无论是你的 if 语句还是你的 elsif语句将始终成功,并且由于两个分支都打印,因此无论 x 和 y 是什么,值都将始终打印。

正如其他答案所说,您需要组合您的子句。

关于ruby - Ruby map 中的排除项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3206444/

相关文章:

python - 如何测试字典是否包含某些键

audio - 低通滤波器编程

r - 在特定列中与 grep 匹配的模式后过滤行

r - 过滤具有至少一个特定值的行

mysql - 是的,另一个 MySql : ERROR 1045 (28000): Access denied for user 'root' @'localhost' (using password: YES)

ruby-on-rails - Rails 延迟作业生产没有发现类/作业代码的变化

ruby - 无法通过SSH运行Chef-solo命令

ruby - RSpec Rake 文件,但没有要加载的此类文件 -- rake/tasklib

javascript - 从两个列表创建一个 json 以在 Javascript 中制作堆积条形图

dictionary - 如何扩充 ResponseWriter 的 Header() 返回的映射