Kav*_*cat 6 ruby arrays hash ruby-on-rails-3
我有一个哈希
x= {
"1"=>{:name=>"test1", :age=>"1"},
"5"=>{:name=>"test2", :age=>"5"},
"2"=>{:name=>"test3", :age=>"2"},
"4"=>{:name=>"test4", :adn=>"4"},
"3"=>{:name=>"test5", :adn=>"3"}
}
Run Code Online (Sandbox Code Playgroud)
期望输出
x= {
"1"=>{:name=>"test1", :age=>"1"},
"2"=>{:name=>"test3", :age=>"2"},
"3"=>{:name=>"test5", :age=>"3"},
"4"=>{:name=>"test4", :adn=>"4"},
"5"=>{:name=>"test2", :adn=>"5"}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试做 x.sort.flatten 并且我得到了
[
"1", {:name=>"test1", :age=>"1"},
"2", {:name=>"test3", :age=>"2"},
"3", {:name=>"test5", :adn=>"3"},
"4", {:name=>"test4", :adn=>"4"},
"5", {:name=>"test2", :age=>"5"}
]
Run Code Online (Sandbox Code Playgroud)
这里有一些其他方法可以做到这一点。
x.keys.sort_by(&:to_i).each_with_object({}) { |k,h| h[k] = x[k] }
#=> {"1"=>{:name=>"test1", :age=>"1"},
# "2"=>{:name=>"test3", :age=>"2"},
# "3"=>{:name=>"test5", :adn=>"3"},
# "4"=>{:name=>"test4", :adn=>"4"},
# "5"=>{:name=>"test2", :age=>"5"}}
Run Code Online (Sandbox Code Playgroud)
或者
k = x.keys.sort_by(&:to_i)
k.zip(x.values_at(*k)).to_h
Run Code Online (Sandbox Code Playgroud)
如果x要修改,
x.keys.sort_by(&:to_i).each { |k| x[k] = x.delete(k) }
x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3475 次 |
| 最近记录: |