我有这个错误NoMethodError (undefined method 'each' for 8:Fixnum)
:引用这行代码:
my_hash.key("free").each{|key| my_array.push(key)}
我要做的是“对于my_hash中具有”free“值的每个条目,将其添加到my_array”。 这是因为my_hash.key(“free”)只返回一个值吗?如果是这样,我怎么能改变它来做我想做的事呢?
这里有更多的周围代码供参考:
my_hash = Hash.new
(8..18).each {|i| my_hash[i] = "free"}
my_array = Array.new
...
hour_array.each{|hour| my_hash[hour] = "busy"} #this is to show that not every key will have value "free"
...
my_hash.key("free").each{|key| my_array.push(key)}
任何解释都会非常感激,因为我是Ruby新手,谢谢!
答案 0 :(得分:1)
也许是这样的事情?:
my_array = []
my_hash = {key1: "not free", key2: "free", key3: "free", key4: "not free", key5: "free"}
my_hash.select{|k,v| my_hash[k] == "free" ? my_array << k : false }
p my_hash
p my_array
返回:
{:key1=>"not free", :key2=>"free", :key3=>"free", :key4=>"not free", :key5=>"free"}
[:key2, :key3, :key5]
答案 1 :(得分:0)
my_hash.key("free")
会返回一个键,而不是您可能期望的数组。
可以通过以下方式选择具有所需值的所有键:
# fails⇒ my_hash.key("free")
my_hash.group_by(&:last)["free"].map(&:first)
这里我们按值对哈希项进行分组,然后选择具有"free"
值的组,然后将其映射回键。