我有结构
[#<struct Page page="P3", value=64, query="Q1">,
#<struct Page page="P2", value=64, query="Q1">,
#<struct Page page="P1", value=48,
query="Q1">]
当我按值对其进行排序时(降序)
[#<struct Page page="P3", value=64, query="Q1">, #<struct Page page="P2", value=64, query="Q1">, #<struct Page page="P1", value=48, query="Q1">]
现在我想要输出
[#<struct Page page="P2", value=64, query="Q1">, #<struct Page page="P3", value=64, query="Q1">, #<struct Page page="P1", value=48, query="Q1">]
现在我希望结构按页面属性排序(首先是最小的)。
答案 0 :(得分:3)
不应该简单地说:
x.sort_by(&:page)
如果要按多个属性排序,可以这样做:
x.sort_by{ | e | [e.page, e.value] }
或
x.sort_by{ | e | [-e.value, e.page] }
如果值具有更高的优先级并且要按降序排序。
答案 1 :(得分:2)
尝试以下方法:
s = Struct.new(:page, :value, :query)
a = [["P3", 64,"Q1"],["P2",64,"Q1"],["P1",48,"Q1"]]
a.map!{|i| s.new(*i)}
a.sort_by(&:page).reverse
#>>[#<struct page="P3", value=64, query="Q1">, #<struct page="P2", value=64, query="Q1">, #<struct page="P1", value=48, query="Q1">]
修改的
按照你的说法使用以下内容:
a.sort_by{ | e | [-e.value, e.page] }
#=>[#<struct page="P2", value=64, query="Q1">, #<struct page="P3", value=64, query="Q1">, #<struct page="P1", value=48, query="Q1">]