配列型は存在しないので、配列処理をおこないたい場合、LSLではリスト型を使います。よく使いそうな関数をあつめてみました。
llListInsertList 配列に要素を挿入する
default {
touch_start(integer total_number)
{
list myList = ["A", "B", "C"];
list newElements = ["D"];
myList = llListInsertList(myList, newElements, 0);
llOwnerSay((string)myList);
}
}
lListInsertList関数
| 一番目のパラメータ | 挿入先のリスト |
| 二番目のパラメータ | 挿入するリスト |
| 三番目のパラメータ | 何番目に挿入するか(0の場合は先頭) |
llDeleteSubList 配列から要素を削除する
default {
touch_start(integer total_number)
{
list myList = ["A", "B", "C", "D"];
myList = llDeleteSubList(myList, 1, 2);
llOwnerSay((string)myList);
}
}
llDeleteSubList関数
| 一番目のパラメータ | 削除先のリスト |
| 二番目のパラメータ | 削除開始の要素番号(0は先頭) |
| 三番目のパラメータ | 削除する終了位置 |
llList2List 配列から指定の要素を取り出す
default {
touch_start(integer total_number)
{
list myList = ["A", "B", "C", "D", "E", "F", "G", "H"];
llOwnerSay((string)llList2List(myList , 2, 5));
llOwnerSay((string)llList2List(myList , 4, -1));
llOwnerSay((string)llList2List(myList , 4, 1));
}
}
llList2List関数:llList2List(list src, integer start, integer end)
| 一番目のパラメータ | 要素を取り出すリスト |
| 二番目のパラメータ | 取り出し開始位置(何番目から取り出すか) |
| 三番目のパラメータ | 取り出し終了位置(何番目まで取り出すか) |
llList2RotとllList2Vector関数は、型変換は自動で行ってくれません。型が違う場合は、サンプルのように ZERO_ROTATION or <0,0,0,1>やZERO_VECTOR or <0,0,0>が返ってきてしまいます。 その場合は、「(vector)llList2String(myList ,4 )」のようにllList2Stringで 文字型として取り出したあと、キャストして使ってください。
llList2Vector(list src, integer index) 配列から指定のVector型要素を取り出す
llList2Rot(list src, integer index) 配列から指定のRotation要素をを取り出す
default {
touch_start(integer total_number)
{
list myList = ["0", "1", "2", "3", "<1.0,1.0,1.0>", "<1.0,1.0,1.0,1.0>"];
llOwnerSay((string)llList2Float(myList , 0));
llOwnerSay((string)llList2Integer(myList , 1));
llOwnerSay((string)llList2Key(myList , 2 ));
llOwnerSay((string)llList2String(myList , 3 ));
llOwnerSay((string)llList2Vector(myList , 4 ));
llOwnerSay((string)llList2Rot(myList , 5 ));
}
}
パラメータ説明は上記の全関数同じです。 一番目のパラメータ : 要素を取り出すリスト 二番目のパラメータ : 取り出し位置(何番目から取り出すか。0から開始)
llListFindList 配列から指定の要素を検索する
default {
touch_start(integer total_number)
{
list myList = ["A", "B", "C", "D", "E", "F", "G", "H"];
list target= ["D"];
integer findIndex = llListFindList(myList, target);
llOwnerSay((string)findIndex );
}
}
llListFindList関数 一番目のパラメータ : 要素を検索するリスト 二番目のパラメータ : 検索する対象
llListSort リストをソートする
default {
touch_start(integer total_number)
{
list myList = ["2", "Apple", "100L$", "1", "Banana", "1L$", "3", "Lemon","50L$"];
myList = llListSort(myList , 3, TRUE);
llOwnerSay((string)myList );
}
}
llListSort関数 一番目のパラメータ : ソートするリスト 二番目のパラメータ : ソートする幅(この例の場合は、3つ1セットでソートされます。) 三番目のパラメータ : ソート順(TRUE:昇順、FALSE:降順)
llListRandomize リストをランダムに並び替える
default {
touch_start(integer total_number)
{
list myList = ["2", "Apple", "100L$", "1", "Banana", "1L$", "3", "Lemon","50L$"];
myList = llListRandomize(myList , 3 );
llOwnerSay((string)myList );
}
}
llListRandomize関数 一番目のパラメータ : ランダムに並べかえるリスト 二番目のパラメータ : ランダムに並べかえる幅(この例の場合は、3つ1セットでソートされます。)
ランダムなので、上記の結果は都度変化します。
llGetListLength リストの要素数を取得する
default {
touch_start(integer total_number)
{
list myList = ["A", "B", "C","D"];
llOwnerSay((string)llGetListLength(myList));
}
}
llListSort関数 一番目のパラメータ : 要素数を取得するリスト