LlListReplaceList/ja

From Second Life Wiki
< LlListReplaceList
Revision as of 07:14, 25 February 2016 by SakuraNoel Fayray (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 llListReplaceList( list dest, list src, integer start, integer end );

リスト変数の一部を別のリスト変数に置き換えて返します。
dest のうち start から end の範囲を取り除き、その start の位置へ src を挿入したリストを list で返します。

• list dest 置き換え対象のリスト
• list src 置き換え後のリスト
• integer start 開始インデックス
• integer end 終了インデックス

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

仕様

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

インデックス

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

警告

  • start あるいは end が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
  • startdest の末尾より大きい場合、src は常に dest の末尾直後に追加されます。start の位置を dest でも保持したい場合、あらかじめ空の要素を dest の末尾に追加しておいてください。同様の結果は 負のインデックス の場合も起こります。
  • 関数の呼び出しそのものは、引数のリスト変数を変更しません。(戻り値を直接操作するのでないならば) 戻り値を変数へ代入しなければなりません。
• 誤: llListReplaceList(a, ["c"], 2, 2)
• 正: a = llListReplaceList(a, ["c"], 2, 2)
  • 引数のリスト変数に戻り値を再度代入するならば、代入前にリスト変数を空にしておくとメモリ節約になります。
• 良い: a = llListReplaceList(a, ["c"], 2, 2)
• もっと良い: a = llListReplaceList((a = []) + a, ["c"], 2, 2)
All Issues ~ Search JIRA for related Bugs

サンプル

default
{
    state_entry()
    {
        list a = ["a", "b", "e", "d"];
        //2 から始まり 2 で終わる範囲を ["c"] で置き換え、b に代入する
         list b = llListReplaceList(a, ["c"], 2, 2);

        //display the change
        llOwnerSay("\""+llList2CSV(a) + "\"  ->  \"" + llList2CSV(b)+"\"");
        //以下のように表示される: "a, b, e, d"  ->  "a, b, c, d"
    }
}

注意点

範囲とインデックス

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

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

詳細は負のインデックスを参照してください。 正確に言うと、挿入先のリスト変数に多くの要素がある必要はありません。1 つの要素を角括弧で囲むだけで、1 個の要素からなるリストにしてしまうことができます。

list TargetList = ["a", "b", "c", "z", "e"];
list InsertList = ["d"];

リスト変数中の一個の要素だけを置き換え対象にする場合、そのインデックスを start と end 両方に指定してください。例えば 0, 0 と指定した場合は先頭の要素だけ、7, 7 と指定した場合は 8 番目の要素だけが置き換え対象になります。

llListReplaceList と同様の処理を、一定間隔の飛び石要素について実行する関数については ListStridedUpdate を参照してください。

関連項目

特記事項

Search JIRA for related Issues

テスト

• llListReplaceList Test

Signature

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