2010-09-29 2 views
6

У меня есть массив @number = [1,2,3,4,5,6,7,8,9]
Теперь я хочу, чтобы рандомизации содержимого массива ... что-то вроде, например: [5,3,2,6,7,1,8]
, пожалуйста, руководство меня, как поступить с ним.Стохастизирующих элементы массива

+2

Дубликат http://stackoverflow.com/questions/1816378/how-to-randomly-sort-scramble-a-array-in-ruby – Nakilon

+1

Ваша гипототическая функция сбросила 2 элемента из массива. Даже «shuffle» не может этого сделать, gg! – Nakilon

ответ

9

Используйте метод shuffle ...

irb(main):001:0> [1,2,3,4,5].shuffle 
=> [3, 4, 2, 5, 1] 
-2
loop n times 
    i = random array index 
    j = random array index 
    swap elements i and j 
end 
+0

Случайно не гарантированно дает правильно распределенные результаты. Следовательно, замена элементов с двумя случайными индексами может дать вам массив с блоками неизменных последовательностей в середине. Вы должны увеличивать i от 0 до n и принимать случайные j, чтобы гарантировать, что * все * элементы будут заменены хотя бы один раз. –

+0

Ужасно. Четный и нечетный 'n' дает два разных набора перестановок. Это так грустно, но все же некоторые преподаватели учат студентов этому методу ... Никогда не делайте этого! – Nakilon

+0

@Nakilon: О чем ты говоришь? Почему имеет значение, если n четно или нечетно? – RyanHennig

7

команда shuffle возвращает рандомизированное версию массива

например:

[1,2,3].shuffle => [2,3,1] 
+1

Работает на 1.8.7p249 –

+2

, и если вы хотите рандомизировать на месте, вы можете просто написать '@ number.shuffle!' – Peter

-1

Если вы используете старую версию рубина ... это будет работать

def randomize(array) 
b = [] 
array.length.downto(1) { |n| 
    b.push array.delete_at(rand(n)) 
} 
b 

конец

а = [1,2,3,4,5] Ь = Randomize (а) печати б

+0

чувак этот код беспорядок! – horseyguy

+0

По крайней мере, он здесь единственный, кто дал рабочее решение без встроенных функций. – Nakilon

1
[1,2,3,4,5,6,7,8,9].sort_by {rand}[0,9] 
=> [5, 7, 3, 8, 9, 4, 2, 1, 6] 
+0

хорошо для 1.8.6 :) но теперь устаревший! – horseyguy

Смежные вопросы