2010年7月27日火曜日

llDeleteSubListとllList2Listっす

listを扱う関数に同じようなのがあるっすね。
今回のタイトルの通りっす。
正解かどうかは別にして、自分なりの使い分けを書いておくっす。
どうもぺんぎんっす( ◎v◎ )


"Delete"と付いてるので渡したlistも変わっちゃいそうなんっすけど、
実際にはコピーを渡してるので元のlistには変化がないっす。
というわけで、2つの関数は同じことをしてるわけっす。

自分の使い分けは
別のlistに代入するときはllList2Listを
元のlistの要素を削除するときにはllDeleteSubListを
という風にしてるっす。
2種類とも使ってるっすよ。

例えば、ギザギザリストを番兵を使って作ったとするっす。
list a = [1, 2, 3, -1, 4, 5, -1, 6, -1, 7, 8, 9, -1];
みたいな感じっす。これは-1を番兵としてるっす。
これを区分けして処理していくことを考えるっす。
 [1, 2, 3]
 [4, 5]
 [6]
 [7, 8, 9]
としたlistを取りたいわけっす。

ここで自分ならどうするかというと、
integer sentinel; // 番兵のインデックス
while(a) // while(llGetListLength(a) != 0) と同義
{
sentinel = llListFindList(a, [-1]);
処理(llList2List(a, 0, sentinel - 1));
a = llDeleteSubList(a, 0, sentinel);
}
こうやるわけっす。
(色付けはhttp://lsl-users.jp/codehighlight/を利用したっす)


なんとなく雰囲気は伝わったと思うんっすけど、どうっすかね?

0 件のコメント:

コメントを投稿

Free Avatar