Ruby on Rails Thursday, July 31, 2014

You can simplify the arrays construction, too: (with slight reformatting of the arrays output)


irb2.1.1> arrays = Array.new(3) { Array.new }
#2.1.1 => [[], [], []]
irb2.1.1> 100.times {|id| arrays.sample.push(id) }
#2.1.1 => 100
irb2.1.1> arrays
#2.1.1 => [[0, 2, 6, 8, 9, 11, 14, 16, 17, 18, 22, 
            24, 29, 31, 37, 42, 47, 49, 53, 54, 57, 
            58, 60, 68, 69, 73, 75, 79, 80, 81, 83, 
            88, 91, 94, 95, 96], 
           [1, 3, 12, 13, 20, 25, 26, 28, 33, 34,
            38, 39, 43, 44, 48, 50, 52, 59, 63, 65,
            70, 72, 74, 77, 78, 82, 86, 87, 89, 97],
           [4, 5, 7, 10, 15, 19, 21, 23, 27, 30, 
            32, 35, 36, 40, 41, 45, 46, 51, 55, 56,
            61, 62, 64, 66, 67, 71, 76, 84, 85, 90,
            92, 93, 98, 99]]
irb2.1.1> arrays.map(&:size)
#2.1.1 => [36, 30, 34]

On 2014-Jul-31, at 12:00 , Eric Saupe <ericsaupe@gmail.com> wrote:

I knew there would be a nice simpler Ruby way. I love the second solution, Rob. Below is the updated example.
id = 100
arrays = [Array.new, Array.new, Array.new]
arrays.sample.push(id)

On Thursday, July 31, 2014 8:45:33 AM UTC-6, Rob Biedenharn wrote:

On 2014-Jul-30, at 10:59 , Eric Saupe <eric...@gmail.com> wrote:

To expand on what Scott is saying here is some code that gives an example of what he is referring to.

id = 100
x  = rand(1..3)
arrays = [Array.new, Array.new, Array.new]
selected_array = arrays[x]
selected_array
.push(id)

And to make it a bit more flexible, you could do:

arrays = [ Array.new,  Array.new,  Array.new ]
x = rand(arrays.size)
arrays[x].push(id)

or even:

arrays = [ Array.new,  Array.new,  Array.new ]
arrays.sample.push(id)


-Rob


On Tuesday, July 29, 2014 8:05:16 PM UTC-6, Scott Ribe wrote:
On Jul 29, 2014, at 7:33 PM, Dave Castellano <li...@ruby-forum.com> wrote:

> Novice question:
>
> I need to assign an item id to one of 3 arrays randomly but can't figure
> out how to specify the correct array by combining "arr" and the randomly
> generated number...
>
> id = "100"
> x = rand(1..3)
>
> arr1 = Array.new
> arr2 = Array.new
> arr3 = Array.new
>
> selected_array =  "#{'arr' + x}"  *** Not sure how to do this ****
>
> selected_array.push(id)
>

While you could append the name and eval, that's not really a clean approach. Just use an array of arrays. Or if else...


--
Scott Ribe
scott...@elevated-dev.com
http://www.elevated-dev.com/
(303) 722-0567 voice





--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/62d3b861-c606-4936-8540-08caae33e8fc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/931a7b70-e8bf-464a-90d8-ae0f4682ee3a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment