Template: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可以设置变量组成员的值,但若试图对变量组索引赋值,则会失败并报错。
其他方法编辑
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
,则返回新的变量组长度。
print编辑
{{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
属性:水
职业:法师