llListRandomize
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: list llListRandomize( list src, integer stride );0.0 | Forced Delay |
10.0 | Energy |
Returns a list which is a randomized permutation of src.
• list | src | – | A list you want to randomize. | |
• integer | stride | – | number of entries per stride, if less than 1 it is assumed to be 1 |
This function supports Strided Lists.
Specification
When you want to randomize the position of every list element, specify a stride of 1. This is perhaps the setting most used.
If the stride is not a factor of the list length, the src list is returned. In other words, llGetListLength(src) % stride
must be 0.
Conceptually, the algorithm selects llGetListLength(src) / stride
buckets, and then for each bucket swaps in the contents with another bucket.
Examples
list dice = ["2", "4", "1", "6", "3", "5"];
default
{
touch_start(integer num_detected) {
list shuffled = llListRandomize(dice, 1);
llOwnerSay(llList2CSV(shuffled));
}
}
list list01 = ["Cold", "pizza", "in", "the", "early", "morning"];
list list_random = llListRandomize(list01, 2);
list_random could be:
- ["Cold", "pizza", "in", "the", "early", "morning"]
- ["Cold", "pizza", "early", "morning", "in", "the"]
- ["in", "the", "Cold", "pizza", "early", "morning"]
- ["in", "the", "early", "morning", "Cold", "pizza"]
- ["early", "morning", "Cold", "pizza", "in", "the"]
- ["early", "morning", "in", "the", "Cold", "pizza"]
Notice that two adjacent elements from the original list are always kept together, because the stride of 2 was specified.
list list_random = llListRandomize(list01, 6);
Notes
Bear in mind that the source list will remain unchanged. Instead, a new list will be produced. So, it's important that you capture this with a variable (unless you are acting directly on the results.)
See Also
Functions
• | llListSort | |||
• | llFrand |