Need help randomly selecting unique values from an array

Discussion in 'Ruby' started by Paul, Aug 30, 2007.

  1. Paul

    Paul Guest

    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.
     
    Paul, Aug 30, 2007
    #1
    1. Advertising

  2. Paul

    Kyle Schmitt Guest

    You could port this code over from C...
    http://xkcd.com/221/


    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]
     
    Kyle Schmitt, Aug 30, 2007
    #2
    1. Advertising

  3. 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:
    ICQ: 205544826
     
    Sebastian Hungerecker, Aug 30, 2007
    #3
  4. Paul

    Paul Guest

    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
     
    Paul, Aug 30, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Anand
    Replies:
    5
    Views:
    500
    Alex Hunsley
    Mar 10, 2007
  2. Anand
    Replies:
    1
    Views:
    380
    Eric Sosman
    Mar 9, 2007
  3. Generic Usenet Account
    Replies:
    9
    Views:
    350
    James Kanze
    Jul 1, 2007
  4. ToshiBoy
    Replies:
    6
    Views:
    849
    ToshiBoy
    Aug 12, 2008
  5. George

    Randomly selecting Variables

    George, Jun 6, 2005, in forum: Perl Misc
    Replies:
    5
    Views:
    127
    Scott Bryce
    Jun 7, 2005
Loading...

Share This Page