連想配列
Link to 連想配列
連想配列(しばしばMapやDictionaryとも称される)とは、複数の要素を格納できるという点において、通常の配列と似ています。 配列と異なる点は、好みの型をインデックス、もしくはキー(Mapではこう呼ぶ)に使うことができるところです。 配列と異なる点は、好みの型をインデックス、もしくはキー(Mapではこう呼ぶ)に使うことができるところです。
連想配列の作り方
Link to 連想配列の作り方
中括弧{}
とコロン:
を使用して、連想配列を宣言できます。
ZenScript Copyval myAssocArray = {
dirt : <minecraft:dirt>,
gold : <minecraft:gold_ingot>
} as IItemStack[string];
では、これをばらして見てみましょう。
val myAssocArray =
普通の変数宣言{
これが、連想配列の宣言です、どうぞdirt : <minecraft:dirt>
<minecraft:dirt>
をdirt
にマッピングします,
そして、次に続きますgold : <minecraft:gold_ingot>
<minecraft:gold_ingot>
をgold
にマッピングします}
これで連想配列の宣言を終了します、どうぞas IItemStack[string];
インデックスに文字列を使用し、要素にIItemStackを格納する連想配列です
さて、使用する際には、何を考えなければならないでしょう。
- Zenscriptで使用可能な全ての型を、キー及び要素にできます。
- テキストだと明示されたものは文字列として解釈されるため、連想配列の宣言(
{}
を使用する)でのキーに変数を設定することはできません。
連想配列の要素へのアクセス
Link to 連想配列の要素へのアクセス
You refer to items inside an Associative Array the same way you refer to items inside a normal Array:
Array[index]
Only difference is this time, you don't necessarily need to use an Integer as index, but whatever type you declared your Array to be!
ZenScript Copy
val dirt = <minecraft:dirt>;
val assocArray = {
<minecraft:dirt> : "This is me"
} as string[IItemStack];
//array[index]
print(assocArray[<minecraft:dirt>]);
//You can also use variables here, as long as the variable is of the correct type
print(assocArray[dirt]);
There is one special case, that is when you use strings as indeces:
In this case you can also use the memberGetter like this:
ZenScript Copyval assocWithStrings = {
//必要であれば「""」が使えます
"one" : "1",
//こうする必要はありません
two : "2"
} as string[string];
//memberGetterを使用できます
print(assocWithStrings.one);
//index Getterも使用できます
print(assocWithStrings["two"]);
連想配列の要素への操作
Link to 連想配列の要素への操作
As in Arrays, you can manipulate items inside an Associative Array using array[index] = newValue
.
There is one major differenc though:
While Arrays have a fixed size, maps don't. すなわち、未使用のインデックスに要素を設定することによって、いつでもエントリを追加できます。
ZenScript Copyval changingArray = {
<minecraft:dirt> : "this is me",
<minecraft:gold_ingot> : "and I hate it"
} as string[IItemStack];
val gg = <minecraft:gold>;
//gold_ingotの値を変更します
changingArray[gg] = "and I love it";
//新しいエントリを追加します
changingArray[<minecraft:grass>] = "Power!";
連想配列のキーおよびエントリセットの取得
Link to 連想配列のキーおよびエントリセットの取得
The KeySet is an array containing all the map's keys.
The valueSet is an array containing all the map's values.
The entrySet is an array containing all the map's entries (see below).
ZenScript CopymyAssocArray.keySet //keySet
myAssocArray.keys //keySet
myAssocArray.values //valueSet
myAssocArray.valueSet //valueSet
myAssocArray.entrySet //entrySet
連想配列の反復処理
Link to 連想配列の反復処理
連想配列では次の2つのイテレータで反復処理が可能です。
- キーイテレータ: キーを反復し、1つの変数を使用
- キー・値イテレータ: キーと値両方を反復し、2つの変数を使用
では、反復処理されるクラフトレシピを保持する連想配列を作ってみましょう。
- キーはクラフト成果で、IItemStackとする
- 値はクラフト材料で、IIngredientとする
- 次のような構文のキーイテレータを使用:
for key in assocArray {doSth;}
- 次のような構文のキー・値イテレータを使用:
for key, value in assocArray {doSth;}
ZenScript Copyimport crafttweaker.item.IItemStack;
import crafttweaker.item.IIngredient;
val dirt = <minecraft:dirt>;
val recipeMapShaped = {
<minecraft:grass> : [[dirt, dirt, dirt],[dirt, dirt, dirt],[dirt, dirt, dirt]],
<minecraft:gold_ingot> : [[dirt, dirt, dirt],[dirt, <minecraft:gold_ingot>, dirt],[dirt, dirt, dirt]]
} as IIngredient[][][IItemStack];
recipeMapShaped[dirt] = [[dirt, dirt, dirt],[dirt, null, dirt],[dirt, dirt, dirt]];
//キーはgrass, goldIngot, dirt
for key in recipeMapShaped {
recipes.addShaped(key, recipeMapShaped[key]);
}
//キーはgrass, goldIngot, dirt、値はそれらのレシピ
for key, value in recipeMapShaped {
recipes.addShaped(key, value);
}
ZenType Entry
Link to zentype-entry
A map Entry consists of a key and a value.
Currently the only way to get such an object is via a map's entrySet method.
getterとしてkey
とvalue
が用意されています。
ZenScript Copy//マップを既存のマップ/連想配列への参照に置き換えます
val myEntry = map.entrySet[0];
myEntry.key; //エントリのキーを返します
myEntry.value; //エントリの値を返します
myEntry.value; //エントリの値を返します