LSL(リンデン スクリプト ランゲージ)言語の基本文法(配列関数)

配列型は存在しないので、配列処理をおこないたい場合、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関数
一番目のパラメータ : 要素数を取得するリスト