LlList2ListStrided/ja

From Second Life Wiki
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.

要約

関数: list llList2ListStrided( list src, integer start, integer end, integer stride );

start から end の範囲で stride の倍数にあたるインデックスから採った飛び石リストの全要素を list で返します。

• list src
• integer start 開始インデックス
• integer end 終了インデックス
• integer stride

startend には 負のインデックス を使用できます。

仕様

インデックス
先頭 0 -length
末尾 length - 1 -1

インデックス

  • 正のインデックスは先頭から数えます。先頭の要素は 0、末尾の要素は (length - 1) のインデックスを持ちます。
  • 負のインデックスは末尾から数えます。先頭の要素は -length、末尾の要素は -1 のインデックスを持ちます。

警告

  • start あるいは end が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
All Issues ~ Search JIRA for related Bugs

サンプル

list mylist = [0,1,2,3,4,5,6];
// インデックスが 2 の倍数の要素を、リストの先頭から末尾の範囲で返す。
list result_a = llList2ListStrided(mylist,0,-1,2);
//result_a == [0,2,4,6]

// インデックスが 2 の倍数の要素を、リストの 2 番目から末尾の範囲で返す。
list result_b = llList2ListStrided(mylist,1,-1,2);
//result_b == [2,4,6]

// インデックスが 2 の倍数の要素を、リストの 3 番目から末尾の範囲で返す。
list result_c = llList2ListStrided(mylist,2,-1,2);
//result_c == [2,4,6]
list menu = ["1", "one", "2", "two", "3", "three"];
default
{
    state_entry()
    {
        llListen(10, "", llGetOwner(), "");
    }
    touch_start(integer detected)
    {
        list buttons = llList2ListStrided(menu, 0, -1, 2);
        llDialog(llDetectedKey(0), "choose a number", buttons, 10);
    }
    listen(integer channel, string obj, key id, string message)
    {
        integer index = llListFindList(menu, [message]);
        if (index != -1)
        {
            llOwnerSay("you chose " + llList2String(menu, index + 1) + " (" + message + ")");
        }
    }
}

注意点

範囲とインデックス

インデックス範囲の説明を容易にするため、まず全てのインデックスを正 (プラス) に変換してください。負のインデックスは先頭でなく末尾から数えたもので、負のインデックスは全て対応する正のインデックスを (範囲に収まる限りは) 持ちます。末尾 (最後のインデックス) を過ぎた正のインデックス、先頭 (最初のインデックス) より前の負のインデックスは有効で、その結果は予測可能かつ信頼できます。すなわち、その要素はあたかも存在するかのように扱われますが、それは出力されるまでの間に限ります。

  • start <= end の場合、範囲は start から end となります。 [start, end]
  • start > end の場合、範囲は 0 から end、および start から -1 となります。 [0, end] + [start, -1]
    • end が先頭より前の負のインデックスの場合、範囲は [start, -1] となります。
    • end が末尾より後の正のインデックスの場合、範囲は [0, end] となります。
    • startend がいずれも有効な範囲から外れていた場合、関数は処理すべき範囲を持たないことになります。(事実上、関数の呼び出しは無駄になります。)

詳細は負のインデックスを参照してください。 飛び石リストにおける "データ集合" の各先頭要素は以下のように取得できます:

list ListStridedFirstElement(list src, integer start, integer end, integer stride) {
     return llList2ListStrided(llList2List(src, start, end), 0, end, stride);
}

飛び石リストにおける "データ集合" の各二番目の要素は以下のように取得できます:

llList2ListStrided(llDeleteSubList(src, 0, 0), 0, -1, 3);

関連項目

特記事項

Search JIRA for related Issues

Signature

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