2011-09-29 8 views
10

Tengo dificultades para escribir un método limpio que cuando pasa una matriz de cadenas yx devuelve una lista aleatoria de elementos de la matriz que suman x, por ej.Recuperar x elementos aleatorios de una matriz

def getrandomarrayelements(thearray, howmany) 
    return [something] 
end 

Sí debo presentar mi código existente, que aunque las obras no es bueno, son las 8 líneas de largo y tengo la sensación de que se puede hacer en una sola ?!

+1

Eso es un tejo y un trato. Hay un montón de arte previo para eso, ¿no? –

Respuesta

27

En Ruby 1.9:

irb(main):001:0> [1,2,3,4,5].sample(3) 
=> [2, 4, 5] 
irb(main):002:0> [1,2,3,4,5].sample(3) 
=> [2, 5, 3] 

y para Ruby 1.8 o menos así:

def sample(arr, n) 
    arr.shuffle[0...n] 
end 

irb(main):009:0> sample([1,2,3,4,5], 3) 
=> [5, 1, 3] 
irb(main):010:0> sample([1,2,3,4,5], 3) 
=> [3, 4, 2] 
+0

En la versión 1.9, ¿eso devolverá elementos únicos, se olvidó de mencionar eso en mi pregunta? – creativetechnologist

+0

sí, será uniq si su matriz tiene elementos uniq. –

Cuestiones relacionadas