Difference between revisions of "LlListReplaceList/ja"

From Second Life Wiki
Jump to navigation Jump to search
(Initial translation)
 
 
(2 intermediate revisions by 2 users not shown)
Line 2: Line 2:
|func_id=296|func_sleep=0.0|func_energy=10.0
|func_id=296|func_sleep=0.0|func_energy=10.0
|func=llListReplaceList|return_type=list
|func=llListReplaceList|return_type=list
|p1_type=list|p1_name=dest|p1_desc=置き換え対象の配列
|p1_type=list|p1_name=dest|p1_desc=置き換え対象のリスト
|p2_type=list|p2_name=src|p2_desc=置き換え後の配列
|p2_type=list|p2_name=src|p2_desc=置き換え後のリスト
|p3_type=integer|p3_name=start
|p3_type=integer|p3_name=start
|p4_type=integer|p4_name=end
|p4_type=integer|p4_name=end
|func_footnote
|func_footnote
|func_desc=配列の一部を別の配列に置き換えて返します。
|func_desc=リスト変数の一部を別のリスト変数に置き換えて返します。
|return_text='''dest''' のうち '''start''' から '''end''' の範囲を取り除き、その '''start''' の位置へ '''src''' を挿入した配列
|return_text='''dest''' のうち '''start''' から '''end''' の範囲を取り除き、その '''start''' の位置へ '''src''' を挿入したリスト
|spec
|spec
|caveats=
|caveats=
*'''start''' が '''dest''' の末尾より大きい場合、'''src''' は常に '''dest''' の末尾直後に追加されます。'''start''' の位置を '''dest''' でも保持したい場合、あらかじめ空の要素を '''dest''' の末尾に追加しておいてください。同様の結果は {{LSLGC|Negative Index/ja|負のインデックス}} の場合も起こります。
*'''start''' が '''dest''' の末尾より大きい場合、'''src''' は常に '''dest''' の末尾直後に追加されます。'''start''' の位置を '''dest''' でも保持したい場合、あらかじめ空の要素を '''dest''' の末尾に追加しておいてください。同様の結果は {{LSLGC/ja|Negative Index|負のインデックス}} の場合も起こります。
*関数の呼び出しそのものは、引数の配列を変更しません。(戻り値を直接操作するのでないならば) 戻り値を配列へ代入しなければなりません。
*関数の呼び出しそのものは、引数のリスト変数を変更しません。(戻り値を直接操作するのでないならば) 戻り値を変数へ代入しなければなりません。
:{{{!}}
:{{{!}}
{{LSL DefineRow|'''誤:'''|<code>llListReplaceList(a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''誤:'''|<code>llListReplaceList(a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''正:'''|<code>a {{=}} llListReplaceList(a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''正:'''|<code>a {{=}} llListReplaceList(a, ["c"], 2, 2)</code>}}
{{!}}}
{{!}}}
*引数の配列に戻り値を再度代入するならば、代入前に配列を空にしておくとメモリ節約になります。
*引数のリスト変数に戻り値を再度代入するならば、代入前にリスト変数を空にしておくとメモリ節約になります。
:{{{!}}
:{{{!}}
{{LSL DefineRow|''':'''| <code>a {{=}} llListReplaceList(a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''良い:'''| <code>a {{=}} llListReplaceList(a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''最善:'''|<code>a {{=}} llListReplaceList((a {{=}} []) + a, ["c"], 2, 2)</code>}}
{{LSL DefineRow|'''もっと良い:'''|<code>a {{=}} llListReplaceList((a {{=}} []) + a, ["c"], 2, 2)</code>}}
{{!}}}
{{!}}}


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


 
        //display the change
         llOwnerSay("\""+llList2CSV(a) + "\"  ->  \"" + llList2CSV(b)+"\"");//display the change
         llOwnerSay("\""+llList2CSV(a) + "\"  ->  \"" + llList2CSV(b)+"\"");
         //以下のように表示される: "a, b, e, d"  ->  "a, b, c, d"
         //以下のように表示される: "a, b, e, d"  ->  "a, b, c, d"
     }
     }
}</lsl>
}</source>
|helpers
|helpers
|also_functions=
|also_functions=
Line 47: Line 48:
|also_articles
|also_articles
|notes=
|notes=
正確に言うと、挿入先の配列に多くの要素がある必要はありません。角括弧で囲まれた一つの要素からなる配列でも構いません。
正確に言うと、挿入先のリスト変数に多くの要素がある必要はありません。1 つの要素を角括弧で囲むだけで、1 個の要素からなるリストにしてしまうことができます。


<lsl>list TargetList = ["a", "b", "c", "z", "e"];
<source lang="lsl2">list TargetList = ["a", "b", "c", "z", "e"];
list InsertList = ["d"];</lsl>
list InsertList = ["d"];</source>


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


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

Latest revision as of 07:14, 25 February 2016

要約

関数: 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の関連した項目が参考になるかもしれません。