2011-09-29 15 views
10

Non riesco a scrivere un metodo pulito che quando viene passato un array di stringhe e x restituisce un elenco casuale di elementi di array per un totale di x, ad es.Recupera x elementi casuali da un array

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

Sì dovrei presentare il mio codice esistente, che, pur opere non è buono, è lungo 8 linee e ho la sensazione che può essere fatto in uno ?!

+1

Questo è un riordino e di un accordo. C'è molta arte precedente per questo, no? –

risposta

27

In 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] 

e per Ruby 1.8 qualcosa di simile:

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

Nella versione 1.9, restituirà elementi unici, ho dimenticato di menzionarlo nella mia domanda? – creativetechnologist

+0

sì, sarà uniq se il tuo array ha elementi uniq. –

Problemi correlati