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可以设置数组成员的值,但若试图对数组索引赋值,则会失败并报错;若索引越界,不会报错,但也不会更新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
属性:水
职业:法师