LlGetListLength/ja

From Second Life Wiki
< LlGetListLength
Revision as of 12:17, 18 April 2017 by SakuraNoel Fayray (talk | contribs) (Japanese Translation LSO Optimizations by Tomoyo Newall.)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

要約

関数: integer llGetListLength( list src );

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

• list src

警告

  • LSL コンパイラは条件文に関する最適化を行なわず、条件文の外側に関数を引き出したりはしません。 精密に 行う必要がなければ、string 値・key 値・list 値の処理は、自分でループの外側に書いて実行させるべきです。詳しくは 使用上の工夫 を参照してください。
All Issues ~ Search JIRA for related Bugs

サンプル

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

注意点

使用上の工夫

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

integer i = 0;
integer length = llGetListLength(mylist);
for (; i < length; ++i) {
    llSay(0, llList2String(mylist, i));
}

以下は、やらない方が良い例です。 for ループの中で長さを計算しており、非効率になっています。ループを繰り返すたびに長さを再計算して取得しているためです。ループを繰り返すたびに間違いなくリスト (の長さ) が変化する場合にのみ、この方法はとられるべきです。[1]

integer i;
for (i = 0; i < llGetListLength(mylist); ++i) {
    llSay(0, llList2String(mylist, i));
}

LSO での最適化

リストの長さの評価をより速く、より小さい (バイト コードの) サイズで済ます方法は、"!=" で空のリストと比較する事です。これは、リストを "!=" で比較すると、その長さの比較になるためです。注意:この最適化は Mono では Mono の llGetListLength 機能がほぼ二倍高速なので時間的利益ははるかに少ないです,しかしながらバイトコードの節約は依然として約30バイトです。

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 は等しい

関連項目

関数

•  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. ^ (長さを計算するときにスタックから取り出すことのできるように) リスト全体がスタックに置かれているときは、VM がリスト全体を (値も含めて) コピーするため、長さの再計算に時間がかかります。

Signature

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