リスト型・配列処理

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