сортировка вложенной хеш-ошибки "не удается преобразовать символ в целое число" - PullRequest
1 голос
/ 04 марта 2012

Я не могу понять, почему это не удается?

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

1 Ответ

6 голосов
/ 04 марта 2012

Ваш синтаксис выключен.

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] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...