Difference between revisions of "Category:LSL Negative Index/ja"

From Second Life Wiki
Jump to navigation Jump to search
(Create)
 
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{multi-lang|1=LSL Negative Index|2=/ja}}
#Redirect [[:Category:LSL 負のインデックス]]
{{LSL Header/ja}}
負のインデックスは、配列末尾から数えたものとして扱われます。
 
例えば ''string s = "Hello World"'' の場合
* インデックス 0 は 'H' です。(''llGetSubString(s,0,0)'')
* インデックス -1 は 'd' です。(''llGetSubString(s,-1,-1)'')
* インデックス -5 は 'W' です。(''llGetSubString(s,-5,-5)'')
 
 
負のインデックスは非常に単純で、LSL はそれを正のインデックスと対であるかのように扱います。<br/>
例えば ''n_ind'' が文字列 ''str'' の負のインデックスだとすると、''n_ind'' の正のインデックス形式は <code>n_ind + llStringLength(str);</code> となります。<br/>
例えば ''p_ind'' が文字列 ''str'' の正のインデックスだとすると、''p_ind'' の負のインデックス形式は <code>p_ind - llStringLength(str);</code> となります。<br/>
 
 
このカテゴリで扱う関数との組み合わせで、[[llListFindList]] と [[llSubStringIndex]] の戻り値を扱う時は注意が必要です。これらの関数は '見つからなかった' を表現するために -1 というインデックスを戻り値とします。範囲を指定する関数にこれをインデックス値として渡すことは可能ですが、望む結果は得られないでしょう。
 
<lsl>
string s = "Hello World";
 
integer index = llSubStringIndex(s, "t");//index == -1
if(~index)//(index != -1) と同じだが、若干早い。-1 (ビットが全て立っている) を '~' でビット反転すると 0 (False) になる。
{
    s = llDeleteSubString(s, index, index);
}
</lsl>
 
==範囲を指定する関数{{Anchor|Range Functions}}==
{|{{Prettytable}}
|-valign="top"
|width="40%"|
'''List'''
* [[llList2List]]
* [[llDeleteSubList]]
* [[llListInsertList]]
* [[llListReplaceList]]
|width="40%"|
'''String'''
* [[llGetSubString]]
* [[llDeleteSubString]]
|}
ややこしい事に、範囲を指定する関数は2つのインデックスと、その範囲で処理される処理対象を持ちます。これらの関数は開始と終了のインデックスを引数に持ちます。負のインデックスは、それと等価な正のインデックスであるかのように扱われます。
 
*開始インデックス (''start'') が終了インデックス (''end'') 以下の場合、関数は [''start'', ''end''] を範囲とみなします。
*開始インデックスが終了インデックスより大きい場合は、[0, ''end''] + [''start'', <span title="infinity">∞</span>] を範囲とみなします。
 
可変長の文字列や配列で非連続なインデックスを扱うのはトリッキーな事です。その長さに応じて、処理対象の範囲は増減します。この点を、先頭および末尾から範囲をとる非連続なインデックスを扱う際には留意してください。
 
<lsl>string bad(string in)
{
    return llGetSubString(in, 5, -5);
}
 
bad("Hello World!");//戻り値は " Wo"、範囲が [5, 8] となるため。
bad("Hello Cat!");//戻り値は " "、範囲が [5, 5] となるため。
bad("Hello !");//戻り値は "Hel !"、範囲が [0, 2] + [5 , 6] となるため。</lsl>

Latest revision as of 00:56, 15 April 2010