【问题标题】:How to sort an array in Ruby by Points? Which is more performant?如何按点对Ruby中的数组进行排序?哪个性能更高?
【发布时间】:2017-06-27 14:00:28
【问题描述】:

我在我的 Rails 控制器中创建了以下哈希:

myObject = []
....
users.each do |u|
  myObject << {
    user_id: u.id,
    display_name: u.display_name,
    points: u.logs.sum(:points)
  }
end

如何按点对 myObject 进行排序,高 > 低?

【问题讨论】:

  • 您的问题不清楚。在标题中,您问“如何在 Ruby 中对哈希进行排序”。在问题中,您写“我有以下哈希……”。但是在最后一句中,您问“我如何对myObject 进行排序”,但myObject 是一个数组,而不是哈希。那么,您是在询问对哈希或数组进行排序吗?此外,如果您能解释为什么您无法在 Ruby 文档中找到您的答案,这也会有所帮助,这样 Ruby 开发人员可以改进文档,以免再次发生这种情况。

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

只需在您的 myObject 数组上使用 sort_by!

myObject = []

users.sort_by { |user| user }.each do |u|
  myObject << {
    user_id: u.id,
    display_name: u.display_name,
    points: u.logs.sum(:points)
  }
end

myObject.sort_by! { |user| user[:points] }

如果您想倒序,请致电reverse!

myObject.sort_by! { |user| user[:points] }.reverse!

或者,您可以使用sort!对其进行排序:

myObject.sort! do |user1, user2|
  user2[:points] <=> user1[:points]
end

如果您希望以相反的顺序更改比较对象的顺序:

myObject.sort! do |user1, user2|
  user1[:points] <=> user2[:points]
end

【讨论】:

  • 要知道使用数据集在计算机上运行时哪个性能更高的唯一方法是在使用数据集的计算机上运行它,看看哪个性能更高。另外,您应该定义“更高性能”,您是什么意思?吞吐量?潜伏?冷缓存?热缓存?稳定状态?抖动?
  • 使用sort! 最终以错误的方向排序,从低到高,我想要从高到低
  • 所以关注reverse!
  • @AnApprentice 使用sort! 可能是最快的方法。如果您需要颠倒顺序,请更改user1user2 的顺序。
猜你喜欢
  • 2010-10-22
  • 2011-01-14
  • 2015-07-03
  • 2010-10-27
  • 2011-02-08
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多