什么和&:哈希意味着在ruby中

时间:2016-10-15 06:36:48

标签: arrays ruby sorting hash

代码如下,我试图理解这个特定的代码在Hash.hash方法中to_a.sort_by(&:hash).hash。我所知道的是,它首先将哈希变为数组,对数组进行排序,然后在hash类上调用Array方法。我试图了解数组究竟是如何排序的?

class Fixnum
  # Fixnum#hash already implemented for you
end

class Array
  def hash
    each_with_index.inject(0) do |intermediate_hash, (el, i)|
      (el.hash + i.hash) ^ intermediate_hash
    end
  end
end

class Hash
  def hash
    to_a.sort_by(&:hash).hash
  end
end

1 个答案:

答案 0 :(得分:0)

这是Symbol#to_proc的语法糖。

在具体情况下,扩展将如下所示:

to_a.sort_by { |e| e.hash }.hash

换句话说,它按照元素的hash值对数组进行排序。