2009年08月31日
lslのlistで連想配列もどき・・
listがあまりにも不便なので、便利物です。
hash_add(string 名称 , list 値のリスト)
戻りはありません。名称を識別名にして、値のリストを登録します。
list hash(string 名称)
名称を登録済みの内容から検索して、見つかった値のリストを返します。
list hash_remove(string 名称)
名称を登録済みの内容から検索して、見つかった値のリストを返した上で、登録内容から削除します。
popの代用品の様な動き。
hash_clear()
登録内容を全消しします。
内容的には、与えられた名前,listの長さ,値のリスト・・・が順番に並んでいて、名前を探して見つかったものを出してくるだけの簡単なものです。
本当はなんと言う名前なんでしょう。。無学が曝されます。。
hash_add(string 名称 , list 値のリスト)
戻りはありません。名称を識別名にして、値のリストを登録します。
list hash(string 名称)
名称を登録済みの内容から検索して、見つかった値のリストを返します。
list hash_remove(string 名称)
名称を登録済みの内容から検索して、見つかった値のリストを返した上で、登録内容から削除します。
popの代用品の様な動き。
hash_clear()
登録内容を全消しします。
内容的には、与えられた名前,listの長さ,値のリスト・・・が順番に並んでいて、名前を探して見つかったものを出してくるだけの簡単なものです。
本当はなんと言う名前なんでしょう。。無学が曝されます。。
//ハッシュ?の登録
list tmpHash=[];
hash_add(string mykey,list l)
{
mykey="LSL_TMP_HASH"+mykey;
integer i=llListFindList(tmpHash,[mykey]);
if (i<0)
{
tmpHash+=[mykey,llGetListLength(l)]+l;
return;
}
else
{
integer len=llList2Integer(tmpHash,i+1);
tmpHash=llListReplaceList(tmpHash,[llGetListLength(l)]+l,i+1,i+len+1);
}
}
//ハッシュ?の削除
//削除されたリストを返す
list hash_remove(string mykey)
{
mykey="LSL_TMP_HASH"+mykey;
integer i=llListFindList(tmpHash,[mykey]);
if (i<0)
{
return [];
}
else
{
integer len=llList2Integer(tmpHash,i+1);
list l=llList2List(tmpHash,i+2,i+len+1);
tmpHash=llListReplaceList(tmpHash,[],i,i+len+1);
return l;
}
}
//ハッシュ?の読み出し
list hash(string mykey)
{
mykey="LSL_TMP_HASH"+mykey;
integer i=llListFindList(tmpHash,[mykey]);
if (i<0) return [];
integer len=llList2Integer(tmpHash,i+1);
return llList2List(tmpHash,i+2,i+len+1);
}
//ハッシュ?の全消し
hash_clear()
{
tmpHash=[];
}
他人が座っているプリムの情報取得/REZした物の情報取得
llCastRay()実装
Visual C# スキャナーから画像を取り込み
lsl 乱数生成器
PIの比較で90度と270度を切り分けるには・・
LSLコード色づけ~これはすごいですね
llCastRay()実装
Visual C# スキャナーから画像を取り込み
lsl 乱数生成器
PIの比較で90度と270度を切り分けるには・・
LSLコード色づけ~これはすごいですね
Posted by RBK Drachnyd(しお) at 21:30│Comments(2)
│忘れない為に。。
これだとリニアサーチで実装した連想配列で、ハッシュとは言わないですねぇ…(llListFindListはリニアサーチと想像されるので)
ハッシュについては、以下を参照。
http://ja.wikipedia.org/wiki/ハッシュテーブル
なお、リンデンの LSL Portal サイトの Script Library にはいろいろ便利なものがありますのでご参照を。
その他の突っ込みどころについては in-world にて^^;