首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于多个属性的排序结构

基于多个属性的排序结构
EN

Stack Overflow用户
提问于 2013-06-19 15:50:49
回答 2查看 603关注 0票数 1

我有结构体

代码语言:javascript
复制
[#<struct Page page="P3", value=64, query="Q1">, 
 #<struct Page page="P2", value=64, query="Q1">, 
 #<struct Page page="P1", value=48,    
 query="Q1">]

当我按值对它进行排序时,它会得到(降序)

代码语言:javascript
复制
[#<struct Page page="P3", value=64, query="Q1">, #<struct Page page="P2", value=64, query="Q1">, #<struct Page page="P1", value=48, query="Q1">]

现在我想要输出

代码语言:javascript
复制
[#<struct Page page="P2", value=64, query="Q1">, #<struct Page page="P3", value=64, query="Q1">, #<struct Page page="P1", value=48, query="Q1">]

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

EN

回答 2

Stack Overflow用户

发布于 2013-06-19 15:58:43

它不应该是简单的:

代码语言:javascript
复制
x.sort_by(&:page)

如果你想按几个属性排序,你可以这样做:

代码语言:javascript
复制
x.sort_by{ | e | [e.page, e.value] }

代码语言:javascript
复制
x.sort_by{ | e | [-e.value, e.page] }

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

票数 3
EN

Stack Overflow用户

发布于 2013-06-19 16:13:14

请尝试以下操作:

代码语言:javascript
复制
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">]

编辑

然后按照你所说的使用下面的代码:

代码语言:javascript
复制
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">]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17185730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档