Есть ли какой-нибудь быстрый способ получить (случайную) перестановку заданного хеша?Например, для массивов я могу использовать метод 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 хэш неупорядочен, сделать это невозможно.