【问题标题】:ruby how to sort this Hash of Arrays [closed]红宝石如何对这个数组哈希进行排序[关闭]
【发布时间】:2014-09-28 21:38:06
【问题描述】:

如何按 :local_totals 从最高到最低的 :locations 对以下数组进行排序。在我的视图页面上,我遍历这个数组并完全按照我想要的方式显示数据,但现在我想将它们从最高位置的本地总数排序到最低位置。这甚至可以使用以下格式吗?

@summaries = [{:time_frame=>"今天", :locations=>["Tampa", "Atlanta", "California", "Georgia", "South Lake Union"], :local_totals=>[100000, 30000, 70000, 50000, 60000], :费用=>[2000, 10000, 4000, 6000, 5000]}]

我尝试以多种不同方式使用标准的 ruby​​ sort_by 方法,但均未成功。

【问题讨论】:

  • 这真的是一个哈希数组吗?看起来无效!
  • 您能否更新您的问题以使数组有效。您还应该更新您的问题,因为它有点令人困惑。您的数组只有 1 个元素,因此对其进行排序没有意义。

标签: ruby-on-rails ruby arrays hash


【解决方案1】:

看起来你实际上有一个包含一些数组的哈希。清理它我认为它应该看起来像这样:

hash = {:time_frame=>"Today", :locations=>["Tampa", "Atlanta", "California", "Georgia", "South Lake Union"], :local_totals=>[10000.0, 30,000, 70000, 50000, :expenses=>[2000, 10000, 4000, 6000]}

假设这是正确的,你可以这样做来解决你的问题:

hash[:locations].zip(hash[:local_totals]).sort_by(&:last)

这假设数组中的位置匹配。

我意识到,通过回答这个问题,我鼓励了不好的问题,但这是我看到它并想知道如何解决它然后想我不妨发布我的解决方案的情况之一。 :)

米纳斯旺 :)

或者如果你想按照书面方式解决它:

@summaries[0][:locations].zip(@summaries[0][:local_totals]).sort_by(&:last).reverse

【讨论】:

  • 感谢您的回复,您是说它看起来像这样吗? @summaries[:locations].zip(@summaries[:local_totals]).sort_by(&:last)我得到一个 nil 对象错误
  • 不,您需要 [0],因为您已将其设为一个数组,其中单个条目为哈希。所以 [0] 引用了哈希, :locations 和 :local_totals 是哈希的键。
  • 太棒了,谢谢伙计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2023-03-04
  • 2014-07-04
相关资源
最近更新 更多