Picking a random member of a Type List
BlitzMax Forums/BlitzMax Beginners Area/Picking a random member of a Type List| 
 | ||
| Let me introduce a problem, I have a tlist that contains all my boss_fragment instances. The name of the tlist is called boss_fragment_list. I need to pick any instance from that list at random and tell it to proform a spawn() function how would this be done? Thanks in advance. | 
| 
 | ||
| you know how big the list is (List.Count) so you can make a random number from 1 to Count.  Then loop through the list with For m:MyType = Each In MyList and keep a counter incrementing each time and when the counter is the same as the precalculated random number, use Exit to break out of the list and m is set to the random type. Hope that makes sense. | 
| 
 | ||
| Ok thanks, sometimes I tend to overcomplicatte things. | 
| 
 | ||
|  keep a counter incrementing each time and when the counter is the same as the precalculated random number, use Exit to break out of the list and m is set to the random type.  Or just use ValueAtIndex. | 
| 
 | ||
| Agree with Perturbatio Local P1:TParticle=TParticle(ParticleList.ValueAtIndex(A)) | 
| 
 | ||
| ValueatIndex uses a loop too, so bare in mind it will be as slow as the first method be nice if you could go straight to index A .... | 
| 
 | ||
|  be nice if you could go straight to index A ....   you could always use an array like this | 
| 
 | ||
| Well I will be having hundreds of objects checking each other at once so optomizations are very important. | 
| 
 | ||
| Ryan: Use my IList code if you'll be having hundreds of objects.  It's much faster if you're sorting or getting an object at a specific index. Using my code you can do pretty much the same thing as with TLists for getting objects at a specific index: Local f:Foo = Foo(MyList.ValueAtIndex( Rand( 0, MyList.Count( )-1 ) )) | 
| 
 | ||
| That looks good, Noel...What type should I use for what sort of problems? | 
| 
 | ||
| I use hash tables for storing data over long periods of time (it pretty much ensures that the data is going to stay in memory since it's going to have a reference until I remove it from the table).  Binary trees.. Um, yeah, not sure what you'd use those for, I just wrote it for fun.  And you can probably find some use for a linked list where others fail. | 
| 
 | ||
| Thanks, Noel | 
| 
 | ||
| Yes, thanks Noel, do you wish to be credited in my game? P.S. Lego for the win!! | 
| 
 | ||
| No, don't care. | 
| 
 | ||
| Actually speed isn't important in this case here is my function. It says Compile Error: Unable to convert from 'boss_fragment' to 'Int' Function choose_cell() Local member%=Rand(1,CountList(boss_fragment.boss_fragment_list)) Local counter%=0 For Local i:boss_fragment=EachIn(boss_fragment.boss_fragment_list) counter:+1 If counter=member Return i Exit End If Next End Function | 
| 
 | ||
| Function choose_cell:boss_fragment() |