sha*_*dar 3 ruby arrays sorting hash ruby-on-rails
我有一个类似于这样的数组:
a = [
[0, {:a=>"31", :b=>"21"}],
[1, {:a=>"32", :b=>"11"}],
[1, {:a=>"25", :b=>"19"}],
[0, {:a=>"12", :b=>"10"}]
]
Run Code Online (Sandbox Code Playgroud)
我希望按每行的第一个元素或散列的各个元素(行中的第二个元素)对其进行排序.
按数组中的第一项排序:
> a.sort_by{|x| x.first}
=> [[0, {:a=>"31", :b=>"21"}],
[0, {:a=>"12", :b=>"10"}],
[1, {:a=>"32", :b=>"11"}],
[1, {:a=>"25", :b=>"19"}]]
Run Code Online (Sandbox Code Playgroud)
按哈希中的第一项排序:
> a.sort_by{|x| x.last.first}
=> [[0, {:a=>"12", :b=>"10"}],
[1, {:a=>"25", :b=>"19"}],
[0, {:a=>"31", :b=>"21"}],
[1, {:a=>"32", :b=>"11"}]]
Run Code Online (Sandbox Code Playgroud)
或者您可以按散列的给定键进行排序:
> sort_key = :b
> a.sort_by{|x| x.last[ sort_key ]}
=> [[0, {:a=>"12", :b=>"10"}],
[1, {:a=>"32", :b=>"11"}],
[1, {:a=>"25", :b=>"19"}],
[0, {:a=>"31", :b=>"21"}]]
Run Code Online (Sandbox Code Playgroud)
如果要按第一个数组值排序,然后按哈希中的第一个条目排序,作为辅助搜索条件,答案是:
> a.sort_by{|x| [x.first, x.last.first]}
=> [[0, {:a=>"12", :b=>"10"}],
[0, {:a=>"31", :b=>"21"}],
[1, {:a=>"25", :b=>"19"}],
[1, {:a=>"32", :b=>"11"}]]
Run Code Online (Sandbox Code Playgroud)