2012-03-04 9 views
1

我想不通爲什麼會失敗?排序一個嵌套的哈希錯誤「不能將符號轉換爲整數」

1.9.3p0 :022 > hash = Hash.new 
=> {} 
1.9.3p0 :023 > hash["jon"] = [:name=>"jon",:age=>22] 
=> [{:name=>"jon", :age=>22}] 
1.9.3p0 :024 > hash["bob"] = [:name=>"bob",:age=>19] 
=> [{:name=>"bob", :age=>19}] 
1.9.3p0 :025 > hash["sid"] = [:name=>"sid",:age=>25] 
=> [{:name=>"sid", :age=>25}] 
1.9.3p0 :026 > hash 
=> {"jon"=>[{:name=>"jon", :age=>22}], "bob"=>[{:name=>"bob", :age=>19}], "sid"=>[{:name=>"sid", :age=>25}]} 
1.9.3p0 :027 > hash.sort_by { |k, v| v[:age] } 
TypeError: can't convert Symbol into Integer 
    from (irb):27:in `[]' 
    from (irb):27:in `block in irb_binding' 
    from (irb):27:in `each' 
    from (irb):27:in `sort_by' 
    from (irb):27 
    from /usr/share/ruby-rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>' 
1.9.3p0 :028 > hash.sort_by { |k, v| v[:age].to_i } 
TypeError: can't convert Symbol into Integer 
    from (irb):28:in `[]' 
    from (irb):28:in `block in irb_binding' 
    from (irb):28:in `each' 
    from (irb):28:in `sort_by' 
    from (irb):28 
    from /usr/share/ruby-rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>' 
1.9.3p0 :029 > 

本文認爲它應該工作:http://www.rubyinside.com/how-to/ruby-sort-hash

回答

6

你的語法是關閉的。

hash["jon"] = [:name=>"jon",:age=>22] 

意味着

hash["jon"] = [{:name=>"jon",:age=>22}] 

因此改變你的代碼:

hash = Hash.new 
hash["jon"] = {:name=>"jon",:age=>22} 
hash["bob"] = {:name=>"bob",:age=>19} 
hash.sort_by { |k, v| v[:age] } 
+0

或者使用'hash.sort_by {| K,V | v [0] [:age]}',但你的方式更好。 :) – 2012-03-04 13:27:24

相關問題