/ / Divide uma matriz em várias matrizes em ordem aleatória - Ruby - ruby, matrizes, aleatória, fatia

Dividir um array em múltiplos arrays em ordem aleatória - Ruby - ruby, arrays, random, slice

Estou tentando dividir uma matriz de nomes em várias matrizes em ordem aleatória cada vez que é executada. Eu sei como dividi-los com:

 name_array = ["bob","john","rob","nate","nelly","michael"]
array = name_array.each_slice(2).to_a
=> [["bob", "john"], ["rob", "nate"], ["nelly", "michael"]]

Mas e se eu quiser cuspi-los em ordem aleatória a cada vez?

Respostas:

5 para resposta № 1

Antes de fazer a mesma coisa, embaralhe a matriz. (Array#shuffle)

name_array.shuffle.each_slice(2).to_a
# => [["nelly", "nate"], ["rob", "bob"], ["michael", "john"]]

ou embaralhe depois de acordo com sua necessidade:

name_array.each_slice(2).to_a.shuffle
# => [["nelly", "michael"], ["rob", "nate"], ["bob", "john"]]

3 para resposta № 2

Amostragem aleatória

Se você souber o tamanho da matriz original, então:

name_array.sample 6

Matriz # amostra reduz sua cadeia de métodos sobre o uso de Array # shuffle. Se você não deseja codificar o tamanho da amostra, pode introspectar o tamanho da matriz em tempo de execução. Por exemplo:

name_array.sample(name_array.size)

Permutação

Se você não precisar insistir em que um determinado nome apareça apenas uma vez no conjunto de resultados, considere também Matriz # permutação:

name_array.permutation(2).to_a.sample(name_array.size)

Os resultados variam, mas aqui está uma amostra bastante impressa dos resultados que você pode esperar dessa abordagem:

[["michael", "rob"],
["bob", "nelly"],
["rob", "bob"],
["michael", "nelly"],
["john", "michael"],
["john", "rob"]]

2 para resposta № 3

Embaralhe a matriz primeiro e depois corte:

["bob","john","rob","nate","nelly","michael"].shuffle.each_slice(2).to_a
#=> [["nelly", "nate"], ["rob", "michael"], ["john", "bob"]]

2 para resposta № 4
array = name_array.each_slice(2).to_a.shuffle

Isso fornecerá resultados diferentes sempre.