NoMethodError(未定义的方法`每个'为8:Fixnum):

时间:2016-02-10 10:35:51

标签: ruby

我有这个错误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新手,谢谢!

2 个答案:

答案 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"值的组,然后将其映射回键。