如果值为零,则从哈希获取密钥

时间:2015-07-02 23:07:38

标签: ruby ruby-on-rails-3

我有3个数组区域,min,max.If min和相应的max都是0然后我想把相应的区域变成数组。

region=["A","B","C","D","E","F","G"]
min= ["0","0","0","200","400","0","0"]
max= ["0","0","0","1000","1000","0","0"]

预期产出:

output=["A","B","C","F","G"]

在上面..ABCFG有相应的最小值和最大值都是0 ..所以我想要那些同时包含min和max 0的区域valuse..i.e区域

我在下面尝试但是没能继续下去

Hash[region.zip([min.map(&:to_i),max.map(&:to_i)].transpose)]

//output
{"A"=>[0, 0], "B"=>[0, 0], "C"=>[0, 0], "D"=>[200, 1000], "E"=>[400, 1000], "F"=>[0, 0], "H"=>[0, 0]}

3 个答案:

答案 0 :(得分:4)

这样做:

region.zip(min, max).select {|_, a, b| a == '0' && b == '0'}.map(&:first)

答案 1 :(得分:2)

试试这个:

output = []
region.each_with_index { |r, i| output << r if min[i] == '0' && max[i] == '0' }
output # => ["A","B","C","F","G"]

答案 2 :(得分:1)

另一种方式:

emin, emax = min.to_enum, max.to_enum

region.select do
  xmin = emin.next == '0'
  xmax = emax.next == '0'
  xmin && xmax
end
  # => ["A", "B", "C", "F", "G"]

额外信用:可以简化为:

region.select do
  emin.next == '0' && emax.next == '0'
end

相关问题