我有结构体
[#<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">]现在,我希望结构按页面属性排序(最先是最小的)。
发布于 2013-06-19 15:58:43
它不应该是简单的:
x.sort_by(&:page)如果你想按几个属性排序,你可以这样做:
x.sort_by{ | e | [e.page, e.value] }或
x.sort_by{ | e | [-e.value, e.page] }如果值具有更高的优先级并按降序排序。
发布于 2013-06-19 16:13:14
请尝试以下操作:
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">]https://stackoverflow.com/questions/17185730
复制相似问题