【问题标题】:Sorting array with multiple fields in Rails在Rails中对具有多个字段的数组进行排序
【发布时间】:2012-04-12 13:21:58
【问题描述】:

考虑下面的哈希

[
{:rank => 3, :time => "3.00 AM" , :name => "JJJ"},
{:rank => 1, :time => "3.05 AM" , :name => "AAA"},
{:rank => 5, :time => "2.55 AM" , :name => "XXX"},
{:rank => 2, :time => "3.10 AM" , :name => "BBB"}
]

如何按顺序对字段进行排序,以便获得结果 就像查询
(考虑我们是否从表中获取 has 中的值)

select * from my_table order by rank, time, name 

如果我不清楚,请发表评论。

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:
    a = [
    {:rank => 3, :time => "3.00 AM" , :name => "JJJ"},
    {:rank => 1, :time => "3.05 AM" , :name => "AAA"},
    {:rank => 5, :time => "2.55 AM" , :name => "XXX"},
    {:rank => 2, :time => "3.10 AM" , :name => "BBB"}
    ]
    res = a.sort_by{|t| [t[:rank], t[:time], t[:name]]}
    

    【讨论】:

    • 感谢 izomorphius... 因为我将时间字段作为字符串,所以时间排序不起作用.. 有什么解决方案吗?
    • 您可以使用慢性宝石:res = a.sort_by{|t| [t[:rank], Chronic.parse(t[:time]), t[:name]]}
    • izomorphius 感谢您的回答.. 但是我应该怎么做才能在任一方向对时间字段进行排序.. 如果我尝试像res = a.sort_by{|t| [t[:rank], -t[:time], t[:name]]} 这样给出它会引发错误!有什么建议吗?
    • @cometbalan 可以在这里找到一些建议:ruby-forum.com/topic/224672 我不知道有什么真正的捷径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多