按键然后按值排序Ruby Hash

时间:2013-09-26 21:27:10

标签: ruby ruby-on-rails-3

我正在使用group_by返回我想先按键排序的哈希值,然后在该键下输入值。

这是我到目前为止提出的代码。一切正常,但我无法弄清楚在分组后如何对值进行排序。

我有一个方法,'pp_accounts_with_properties'显示我的意图并以正确的顺序打印出所有内容(感谢properties.sort_by!调用)......但似乎我应该能够以某种方式完成此操作'accounts_with_properties'方法。

class ProofList
  attr_reader :client

  def initialize(client)
    @client = client
  end

  def properties
    @client.properties.joins(invoices: [charges: [:charge_credits]])
                      .where(charge_credits: { approved: false }).uniq
  end

  def accounts_with_properties
    unsorted_accounts_with_properties.sort_by { |account, properties| account[:acct_number] }
  end

  def unsorted_accounts_with_properties
    properties.group_by { |property| property.account }
  end

  def pp_accounts_with_properties
    accounts_with_properties.each do |account, properties|
      puts account.name
      properties.sort_by! { |p| p[:name] }
      properties.each do |property|
        puts property.name
      end
    end
  end

end

1 个答案:

答案 0 :(得分:1)

你是......

  1. 谈论显示Hash的键和值的某种排序显示,或
  2. 实际上以某种方式重新排列哈希的内部结构?那么,例如,对myhash.keys的调用总是以某种顺序返回事物?
  3. 如果是2,为什么?你正在咆哮错误的树。哈希只是键与值的关联,如果你正在做任何,其中键的顺序很重要(除了试图制作一个漂亮/可读的显示),你就要去做< em>某事错误的方式。

    查看本文以获得比我更清楚的解释:http://www.rubyinside.com/how-to/ruby-sort-hash