模板:Array
簡介
這是一個模擬數組形式生成結構化數據的模板,可以進行大量的存儲、操作或傳輸數據,#在Lua中獲取或構造。本質上就是一次聲明多個命名有關聯的變量。
因為未使用字符串處理,相對於使用字符串處理來分割參數的做法可以更安全地存儲或傳遞數據。
用法
作為數組或數組成員的變量名都以「@array-innerArrayIdentifier:」為前綴,在使用時一般不需要關注這一點,這裡只是提供一個說明。
構造數組
{{array|new|name=数组名,必须传入 |数据1 |数据2 |数据... |{{array|in <!-- 可以在模板内部使用in继续添加数组,构建一个多维数组 --> |数据... |{{array|in |数据... }} }} |r=若r为true,则返回name参数的值}}
取值與設置
get
{{array|get|数组名|第一维序号|第二维序号|第三维序号|...}} {{array|get|数组名|count}} {{array|get|数组名|第一维序号|count}} {{array|get|数组名|第一维序号|...第n维序号|count}}
get可以獲取數組成員的值,但若試圖獲取數組索引,則會失敗並報錯;若索引越界,則視為未定義行為。
set
{{array|set|数组名|第一维序号|第二维序号|...|val=要设置的值}}
set可以設置數組成員的值,但若試圖對數組索引賦值,則會失敗並報錯;若索引越界,不會報錯,但也不會更新count。
其他方法
push
{{array|push|数组名|第一维序号|第二维序号|...|val=要添加的值}}
在數組尾部追加一個值,其中定位要操作的數組的方法和get一致。
若設置了r=true
,則返回追加後數組的長度。
pop
{{array|pop|数组名|第一维序号|第二维序号|...}}
刪除數組的最後一個值。若數組長度為0,則不進行任何操作。
若設置了r=true
,則返回被刪除的那個值。
unshift
{{array|unshift|数组名|第一维序号|第二维序号|...|val=要添加的值}}
在數組頭部追加一個值。
若設置了r=true
,則返回追加後數組的長度。
shift
{{array|shift|数组名|第一维序号|第二维序号|...}}
刪除數組的第一個值。若數組長度為0,則不進行任何操作。
若設置了r=true
,則返回被刪除的那個值。
getIndex
{{array|getIndex|数组名|第一维序号|第二维序号|...}}
獲取數組的索引值。也可以獲取到普通值,但因沒有提示,所以並不推薦使用。
ifIndex
{{array|ifIndex|数组索引}}
判斷一個字符串是否為數組索引,是返回1,否返回空。
splice
{{array|splice |index= 数组索引 |start= 操作起始位置,默认为1,不能超过要操作的数组的长度 |howmany= 要删除的成员数量,默认为1 |添加值... }}
操作數組的值,利用這個方法可以進行刪除、添加、替換等操作。你可以把這個方法看作是JavaScript中數組的splice方法。
若設置了r=true
,則返回新的數組長度。
{{array|print|数组名|第一维序号|第二维序号|...}}
列印數組,用於檢查數組當前的內容。
簡寫
構造時簡寫
構造時也可以省略「new」。這時,數組的第一個值一定不能等於上面列出的方法中的任何一個(包括new),否則構造時將出現錯誤。
其他
所有的參數名「name」也可以寫成「id」。
在Lua中獲取或構造
請參考:Module:var-array
示例
示例1
{{array|new|name=arr |ab |cd |ef }} {{array|get|arr|2}}
結果: cd
示例2
{{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錯誤:數組名無效。
示例3
{{array|id=student |{{array|in|shinobu|大宫忍| {{array|in |短发|大和抚子 }} }} }} {{array|get|student|1|3|2}}
結果: 大和撫子
示例4
{{array|id=test |5,日,牧师 |4,火,牧师 |3,火,剑士 |3,水,法师 }} {{array|shift|test}} {{array|get|test|1}}
結果: 4,火,牧師
示例5
{{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", }
示例6
{{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", "水", "法师", }, }
示例7
使用{{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
屬性:水
職業:法師