![]() | 此模板使用Lua語言: |
這是一個模擬數組形式生成結構化數據的模板,可以進行大量的存儲、操作或傳輸數據,#在Lua中獲取或構造。本質上就是一次聲明多個命名有關聯的變量。
因為未使用字符串處理,相對於使用字符串處理來分割參數的做法可以更安全地存儲或傳遞數據。
作為數組或數組成員的變量名都以「@array-innerArrayIdentifier:」為前綴,在使用時一般不需要關注這一點,這裡只是提供一個說明。
{{array|new|name=數組名,必須傳入 |數據1 |數據2 |數據... |{{array|in <!-- 可以在模板內部使用in繼續添加數組,構建一個多維數組 --> |數據... |{{array|in |數據... }} }} |r=若r為true,則返回name參數的值}}
{{array|get|數組名|第一維序號|第二維序號|第三維序號|...}} {{array|get|數組名|count}} {{array|get|數組名|第一維序號|count}} {{array|get|數組名|第一維序號|...第n維序號|count}}
get可以獲取數組成員的值,但若試圖獲取數組索引,則會失敗並報錯;若索引越界,則視為未定義行為。
{{array|set|數組名|第一維序號|第二維序號|...|val=要設置的值}}
set可以設置數組成員的值,但若試圖對數組索引賦值,則會失敗並報錯;若索引越界,不會報錯,但也不會更新count。
{{array|push|數組名|第一維序號|第二維序號|...|val=要添加的值}}
在數組尾部追加一個值,其中定位要操作的數組的方法和get一致。
若設置了r=true
,則返回追加後數組的長度。
{{array|pop|數組名|第一維序號|第二維序號|...}}
刪除數組的最後一個值。若數組長度為0,則不進行任何操作。
若設置了r=true
,則返回被刪除的那個值。
{{array|unshift|數組名|第一維序號|第二維序號|...|val=要添加的值}}
在數組頭部追加一個值。
若設置了r=true
,則返回追加後數組的長度。
{{array|shift|數組名|第一維序號|第二維序號|...}}
刪除數組的第一個值。若數組長度為0,則不進行任何操作。
若設置了r=true
,則返回被刪除的那個值。
{{array|getIndex|數組名|第一維序號|第二維序號|...}}
獲取數組的索引值。也可以獲取到普通值,但因沒有提示,所以並不推薦使用。
{{array|ifIndex|數組索引}}
判斷一個字符串是否為數組索引,是返回1,否返回空。
{{array|splice |index= 數組索引 |start= 操作起始位置,默認為1,不能超過要操作的數組的長度 |howmany= 要刪除的成員數量,默認為1 |添加值... }}
操作數組的值,利用這個方法可以進行刪除、添加、替換等操作。你可以把這個方法看作是JavaScript中數組的splice方法。
若設置了r=true
,則返回新的數組長度。
{{array|print|數組名|第一維序號|第二維序號|...}}
列印數組,用於檢查數組當前的內容。
構造時也可以省略「new」。這時,數組的第一個值一定不能等於上面列出的方法中的任何一個(包括new),否則構造時將出現錯誤。
所有的參數名「name」也可以寫成「id」。
請參考:Module:var-array
{{array|new|name=arr |ab |cd |ef }} {{array|get|arr|2}}
結果: cd
{{array|id=student |{{array|in|shinobu|大宮忍|鬼畜木芥子}} |{{array|in|alice|愛麗絲}} }} {{array|get|student|1|1}}、{{array|get|student|2|2}} student1數據總數:{{array|get|student|1|count}} 嘗試對內部數組1進行取值:{{array|get|student|1}}
結果: shinobu、愛麗絲
student1數據總數:3
嘗試對內部數組1進行取值:Lua錯誤:數組名無效。
{{array|id=student |{{array|in|shinobu|大宮忍| {{array|in |短髮|大和撫子 }} }} }} {{array|get|student|1|3|2}}
結果: 大和撫子
{{array|id=test |5,日,牧師 |4,火,牧師 |3,火,劍士 |3,水,法師 }} {{array|shift|test}} {{array|get|test|1}}
結果: 4,火,牧師
{{array|id=test |111 |222 |333 |444 |555 }} {{array|splice |index= {{array|getIndex|test}} |start=2 |howmany= 3 |aaa|bbb }} {{array|print|test}}
結果:
table#1 { "111", "aaa", "bbb", "555", }
{{array|id=角色信息表 |{{array|in|5|日|牧師}} |{{array|in|4|火|牧師}} |{{array|in|3|火|劍士}} |{{array|in|3|水|法師}} }}<!-- -->{{loop|times=1|{{array|get|角色信息表|count}}|do=<nowiki> 稀有度:{{array|get|角色信息表|{{#var:times}}|1}}<br /> 職業:{{array|get|角色信息表|{{#var:times}}|2}}<br /> 屬性:{{array|get|角色信息表|{{#var:times}}|3}}<br /> <br /> <nowiki> }} 打印數組:{{array|print|角色信息表}}
稀有度:5
職業:日
屬性:牧師
稀有度:4
職業:火
屬性:牧師
稀有度:3
職業:火
屬性:劍士
稀有度:3
職業:水
屬性:法師
列印數組:
table#1 { table#2 { "5", "日", "牧師", }, table#3 { "4", "火", "牧師", }, table#4 { "3", "火", "劍士", }, table#5 { "3", "水", "法師", }, }
使用{{split}}將每個變量的值分割成3個數據,輸出。
{{array|new|name=角色信息表 |5,日,牧師 |4,火,牧師 |3,火,劍士 |3,水,法師 }}<!-- -->{{#loop:times|1|{{array|get|角色信息表.count}} |{{#vardefine:info|{{array|get|角色信息表|{{#var:times}}}}}} {{split|{{#var:info}}|,|charaInfo}} 稀有度:{{#var:charaInfo1}}<br /> 屬性:{{#var:charaInfo2}}<br /> 職業:{{#var:charaInfo3}}<br /> <br /> }}
稀有度:5
屬性:日
職業:牧師
稀有度:4
屬性:火
職業:牧師
稀有度:3
屬性:火
職業:劍士
稀有度:3
屬性:水
職業:法師