LlList2ListStrided

From Second Life Wiki

(Redirected from LSL llList2ListStrided)
Jump to: navigation, search

Contents

Description

Function: list llList2ListStrided( list src, integer start, integer end, integer stride );
198 Function ID
0.0 Delay
10.0 Energy

Returns a list of all the entries in the strided list whose index is a multiple of stride in the range start to end.

• list src
• integer start start index
• integer end end index
• integer stride


start & end support negative indexes.

Specification

Index Positive Negative
First 0 -length
Last length - 1 -1

Mentally first translate any negative indexes into positive indexes

  • If start <= end then the range operated on starts at start and ends at end. [start, end]
  • If start > end then the range operated on starts at 0 and goes to end and then starts again at start and goes to -1. [0, end] + [start, -1]

Positive indexes past the length (after the last index), or negative indexes past the beginning (before the first index) are valid. The effects are predictable, the entries are treated as if they were there but were removed just before output.

See negative indexes for more information.

Examples

list mylist = [0,1,2,3,4,5,6];
list result_a = llList2ListStrided(mylist,0,-1,2); //start at first item in list, go to the end, return every 2nd item
//result_a == [0,2,4,6]
 
list result_b = llList2ListStrided(mylist,1,-1,2); //start at second item in list, go to the end, return every 2nd item
//result_b == [2,4,6]
 
list result_c = llList2ListStrided(mylist,2,-1,2); //start at third item in list, go to the end, return every 2nd item
//result_c == [2,4,6]

list menu = ["1", "one", "2", "two", "3", "three"];
default
{
    state_entry()
    {
        llListen(10, "", llGetOwner(), "");
    }
    touch_start(integer detected)
    {
        list buttons = llList2ListStrided(menu, 0, -1, 2);
        llDialog(llDetectedKey(0), "choose a number", buttons, 10);
    }
    listen(integer channel, string obj, key id, string message)
    {
        integer index = llListFindList(menu, [message]);
        if (index != -1)
        {
            llOwnerSay("you chose " + llList2String(menu, index + 1) + " (" + message + ")");
        }
    }
}

Notes

To get every first element in a "collection of data" in a strided list:

list ListStridedFirstElement(list src, integer start, integer end, integer stride) {
     return llList2ListStrided(llList2List(src, start, end), 0, end, stride);
}

To get every second element in a "collection of data" in a strided list:

llList2ListStrided(llDeleteSubList(src, 0, 0), 0, -1, 3);

See Also

Articles

•  Negative Index
Personal tools