[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Need help randomly selecting unique values from an array

Paul

8/30/2007 4:16:00 PM

Hi there,

I have a simple array that I have to pick one or more unique values
from and am kind of stumped as to how to do this. Here's the what the
array looks like:

foo = [2, 7, 10, 14] # (or could equal a diff't set of 4
numbers)

Now for this task, I'm not interested in the first element at all.
I'd rather just leave it alone and not delete it though.
What I need to do is pick 1 to 3 elements randomly from the array. I
can't reuse the numbers.

So, for example, if I need 1 number then it could be any of the
elements 1-3 from the array.
If I need 2 numbers, it could be any of elements 1-3 but I can't pick
the same number twice. Ditto for when I need 3 numbers.

I don't need the numbers in any particular order, so I'm just looking
for the simplest loop/function to pick the unique numbers for me.

Any suggestions? Thanks.

3 Answers

Kyle Schmitt

8/30/2007 4:33:00 PM

0

You could port this code over from C...
http://xkc...


OK ok seriously though.
rand(foo.length) will randomly pick any one of them, but you want to
ignore index zero so
rand(foo.length -1 ) + 1 should do the trick.

This is a slightly... stupid way of doing it, but considering the size
of the data, it's a choice of what's more stupid, generating random
numbers until you get two that aren't the same, or something like
this..

number1 = foo[rand(foo.length-1)+1]
foo2=foo-[number1]
number2 = foo2[rand(foo2.length-1)+1]

Sebastian Hungerecker

8/30/2007 4:34:00 PM

0

Paul wrote:
> foo = [2, 7, 10, 14] # (or could equal a diff't set of 4
> numbers)
>
> Now for this task, I'm not interested in the first element at all.
> I'd rather just leave it alone and not delete it though.

So you use foo[1..-1]. That will create a new array not containing the first
item and leave the original array untouched.

> What I need to do is pick 1 to 3 elements randomly from the array. I
> can't reuse the numbers.

foo[1..-1].sort_by {rand}.first(n)
where n is a number between 1 and 3.

HTH,
Sebastian
--
NP: Novembers Doom - Dark World Burden
Jabber: sepp2k@jabber.org
ICQ: 205544826

Paul

8/30/2007 5:26:00 PM

0

Excellent! That's amazingly simple! (and I never would have figured
that out)
It's just what I need. Thanks.

On Aug 30, 12:33 pm, Sebastian Hungerecker wrote:
> foo[1..-1].sort_by {rand}.first(n)
> where n is a number between 1 and 3.
>
> HTH,
> Sebastian