1

我有结构

[#<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">]

现在我希望结构按页面属性排序(最小的在前)。

4

2 回答 2

3

不应该是简单的:

x.sort_by(&:page)

如果要按多个属性排序,可以这样做:

x.sort_by{ | e | [e.page, e.value] }

或者

x.sort_by{ | e | [-e.value, e.page] }

如果这些值具有更高的优先级并且要按降序排序。

于 2013-06-19T07:58:43.453 回答
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">]
于 2013-06-19T08:13:13.993 回答