リスト型・配列処理
配列型は存在しないので、配列処理をおこないたい場合、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)
一番目のパラメータ | 要素を取り出すリスト |
二番目のパラメータ | 取り出し開始位置(何番目から取り出すか) |
三番目のパラメータ | 取り出し終了位置(何番目まで取り出すか) |
- llList2Float(list src, integer index) 配列から指定の要素をFloat型にキャストして取り出す
- llList2Integer(list src, integer index) 配列から指定の要素をInteger型にキャストして取り出す
- llList2Key(list src, integer index) 配列から指定の要素をkey型にキャストして取り出す
- llList2String(list src, integer index) 配列から指定の要素をstring型にキャストして取り出す
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 )); } }
- llList2Float関数:llList2Float(list src, integer index)
- llList2Integer関数:llList2Integer(list src, integer index)
- llList2Key関数:llList2Key(list src, integer index)
- llList2String関数:llList2String(list src, integer index)
- llList2Rot関数:llList2Rot(list src, integer index)
- llList2Vector関数:llList2Vector(list src, integer index)
パラメータ説明は上記の全関数同じです。 一番目のパラメータ : 要素を取り出すリスト 二番目のパラメータ : 取り出し位置(何番目から取り出すか。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関数 一番目のパラメータ : 要素数を取得するリスト