模板:Array

出自H萌娘
跳至導覽 跳至搜尋
Template-info.svg 模板文檔  [查看] [編輯] [歷史] [刷新]

簡介[編輯原始碼]

這是一個模擬數組形式生成結構化數據的模板,可以進行大量的存儲、操作或傳輸數據,與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
屬性:水
職業:法師