Skip to content
lsl.devlsl.devLSL Dev

llList2ListSlice

function
Function syntax
list llList2ListSlice(
  1. list src,// Source strided list.
  2. integer start_index,// Zero-based start index (inclusive).
  3. integer end_index,// Zero-based end index (inclusive).
  4. integer stride,// Number of entries per stride (defaults to 1 if less than 1).
  5. integer slice_index// Zero-based element index within each stride to extract (negatives count backward from the end of the stride).
);
Returns
list
Energy
10

The index of the first entry in the list is 0

The index of the first entry in a slice is 0

If start, end, or slice_index are negative they are indexed from end of list. -1 is last element in the list. -list_length is the 1st element of the list.

If slice_index is negative it is counted from the end of its stride regardless of whether or not the stride exceeds the end of the list. e.g: -1 is the last element in a stride.

If start > end the range from start to end is treated as an exclusion range.

Returns a list of the slice_index’th element of every stride in strided list whose index is a multiple of stride in the range start to end.

How to use
list result = llList2ListSlice([], 0, 0, 0, 0);
Example 1
list mylist = [0,1,2,3,4,5,6];
list result_a = llList2ListSlice(mylist,0,-1,3,0); //start at first item in list, go to the end, return 1st slice of every stride of 3
//result_a == [0,3,6]
list result_b = llList2ListSlice(mylist,0,-1,3,1); //start at first item in list, go to the end, return 2nd slice of every stride of 3
//result_b == [1,4]
list result_c = llList2ListSlice(mylist,1,-1,3,1); //start at second item in list, go to the end, return 2nd slice of every stride of 3
//result_c == [2,5]
list result_d = llList2ListSlice(mylist,2,-1,3,-1); //start at third item in list, go to the end, return last slice of every stride of 3
//result_d == [4]
list result_e = llList2ListSlice(mylist,4,2,1,0); //4>2 so this is an exclusion. slice indices count from 0 and first element after exclusion. Return every element not in range with a stride of 1
//result_e == [0,1,2,4,5,6]
Example 2
7 collapsed lines
list menu = ["1", "one", "2", "two", "3", "three"];
default
{
state_entry()
{
llListen(10, "", llGetOwner(), "");
}
touch_start(integer detected)
{
list buttons = llList2ListSlice(menu, 0, -1, 2, 0);
llDialog(llDetectedKey(0), "choose a number", buttons, 10); //display the digits
}
listen(integer channel, string obj, key id, string message)
{
integer index = llListFindList(menu, [message]);
if (index != -1)
{
list names = llList2ListSlice(menu, 0, -1, 2, 1);
llOwnerSay("you chose " + llList2String(names, index/2) + " (" + message + ")");
}
}
}
  • StrideOfList - Starting from start and stopping before end exceeded it skips every stride-1 items. returns the slice_index element of the stride if its position is less than list length.

If the list is not modulo the stride, elements up to the length of the list will be returned in the final slice matching conditions. e.g. a list of 5 elements with a stride of 2 will return 3 elements for a 0,5 range on slice index 0 but only 2 if the slice_index is 1.

Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.