有没有一种快速的方法来获取给定哈希值的(随机)排列?例如,对于数组,我可以使用 sample 方法,如下所示:
ruby-1.9.2-p180 :031 > a = (1..5).to_a
=> [1, 2, 3, 4, 5]
ruby-1.9.2-p180 :032 > a.sample(a.length)
=> [3, 5, 1, 2, 4]
对于哈希,我可以使用相同的方法处理哈希键,并构建一个新的哈希表。
ruby-1.9.2-p180 :036 > h = { 1 => 'a', 2 => 'b', 3 => 'c' }
=> {1=>"a", 2=>"b", 3=>"c"}
ruby-1.9.2-p180 :037 > h.keys.sample(h.length).inject({}) { |h2, k| h2[k] = h[k]; h2 }
=> {3=>"c", 2=>"b", 1=>"a"}
但是这样太丑了。有没有一种“示例”方法可以避免所有的代码呢?
更新如@Michael Kohl在评论中指出的那样,这个问题只对ruby 1.9.x有意义。由于在1.8.x中哈希是无序的,所以没有办法做到这一点。
h.each
确实具有明确定义的顺序。 - mu is too short1.8.7-p334
的rvm。示例方法在1.8.x中不可用,shuffle可以工作,但正如你所说,它在构建新哈希时没有任何效果。 - Fabio