LlGetListLength/ja

From Second Life Wiki
< LlGetListLength
Revision as of 06:22, 18 May 2009 by MasterOf Perl (talk | contribs) (Initial translation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

要約

関数: integer llGetListLength( list src );

リスト src にある要素数を integer で返します。

• list src

警告

  • LSL コンパイラは条件文に関する最適化を行ないません。(条件文の外側に関数を引き出したりはしません。) 動的なデータを精密に扱うといったケースで無いならば、string 値・key 値・list 値の長さ計算は、ループの外側で行なわれるべきです。詳しくは使用上の工夫を参照してください。
All Issues ~ Search JIRA for related Bugs

サンプル

<lsl>//Basic usage default {

   state_entry()
   {
       list l = ["one", "two", "three"];
       integer i = llGetListLength(l);
       llOwnerSay("there are " + (string)i + " entries in the list");
   }
}</lsl>

注意点

使用上の工夫

リストのループ処理でリストの長さを使う際は、あらかじめリストの長さを求めておき、それからループ処理に入った方が良いです:

<lsl> integer i = 0; integer length = llGetListLength(mylist); for (; i < length; ++i) {

   llSay(0, llList2String(mylist, i));

} </lsl>

以下は、やらない方が良い例です。for ループの各繰り返し毎にリストの長さを再計算しているので、非効率になっています。ループの各繰り返し毎にリストの長さが実際変化するという場合のみ、この方法はとられるべきです[1]

<lsl> integer i; for (i = 0; i < llGetListLength(mylist); ++i) {

   llSay(0, llList2String(mylist, i));

} </lsl>

最適化

リストの長さの評価をより速く、より小さい (バイト コードの) サイズで済ます方法は、"!=" で空のリストと比較する事です。これは、リストを "!=" で比較すると、その長さの比較になるためです。 <lsl> list in; integer len_in = llGetListLength(in); integer flen_in = (in != []); //flen_in と len_in は等しい

integer neg_len_in = -llGetListLength(in); integer fneg_len_in = ([] != in); //fneg_len_in と neg_len_in は等しい </lsl>

関連項目

関数

•  llListStatistics LIST_STAT_NUM_COUNT – リスト内の integer 型データと float 型データの個数を返します。
•  llStringLength string 値の文字数を返します。

特記事項

Search JIRA for related Issues

ソース

'linden\indra\lscript\lscript_library\lscript_alloc.cpp' @ lsa_cmp_lists
'linden\indra\lscript\lscript_execute\lscript_execute.cpp' @ list_list_operation

脚注

  1. ^ list 変数がスタック領域に置かれている場合は VM がリスト全体を (値も含めて) コピーするため、リストの長さの再計算は時間がかかります。(計算が済むとスタック領域から除かれます。)

Signature

function integer llGetListLength( list src );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。