繁体   English   中英

如何用Ruby中的不同元素对混合数组进行排序?

[英]How to sort a mixed array by different elements in Ruby?

我有一个类似于这样的数组:

a = [
  [0, {:a=>"31", :b=>"21"}],
  [1, {:a=>"32", :b=>"11"}],
  [1, {:a=>"25", :b=>"19"}],
  [0, {:a=>"12", :b=>"10"}]
]

我希望按每行的第一个元素或散列的各个元素(行中的第二个元素)对其进行排序。

按数组中的第一项排序:

> 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"}]] 

按哈希中的第一项排序:

> 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"}]] 

或者您可以按散列的给定键进行排序:

> 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"}]] 

如果要按第一个数组值排序,然后按哈希中的第一个条目排序,作为辅助搜索条件,答案是:

> 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"}]] 
a = [
  [0, {:a=>"31", :b=>"21"}],
  [1, {:a=>"32", :b=>"11"}],
  [1, {:a=>"25", :b=>"19"}],
  [0, {:a=>"12", :b=>"10"}]
]
p a.sort_by{|el| [el.first, *el.last.values]}

输出:

=> [[0, {:a=>"12", :b=>"10"}], 
    [0, {:a=>"31", :b=>"21"}], 
    [1, {:a=>"25", :b=>"19"}], 
    [1, {:a=>"32", :b=>"11"}]]

好吧,我找到了自己问题的答案。 请比较和评论。

#sort by first item of each row (number)
a.sort{|x,y| x[0] <=> y[0]}

#sort by the first item in the hash
a.sort{|x,y| x[1][:a] <=> y[1][:a]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM