Map
説明
バリアントのキーおよび値の連想配列です。
Mapには一連のキーが格納されています。各キーには値が関連付けられており、キーを使用することで値を取得できます。例:Map map;
map[5] = 10;
int x = map[5]; // x is 10
この例では、MapがArrayのように[]演算子を使用しています。ただし、Mapにおける[]演算子には、次のように2つの重要な違いがあります。- Mapではキーとしてどのような値も使用できます。
Map map; map["Hello"] = "world"; map[Model.find("Processor1")] = 10;
- Mapの[]では、[]内の値が常にMapに追加されます。
Map map; map[1]; map[2]; map[3]; // The map now has three keys in it. // The default value associated with // each key is a null variant.
バリアントはMap値を保持することができます。詳細については、「Variant」のトピックを参照してください。
動的プロパティ
Mapは、動的プロパティを使用して文字列キーを操作することができます。
Map map;
map.Key1 = 1; // identical to map["Key1"] = 1;
map.MyKeyName = 3; // identical to map["MyKeyName"] = 3;
return map.Key1; // NOT identical to map["Key1"]
動的プロパティを使用してマップを記述する場合、プロパティがアサートされます。これは、[]演算子を使用するのと同じ動作です。ただし、動的プロパティを使用してマップを読み込む場合、キーが存在しなければ例外が発生します。
Mapを調べる
キーがマップに存在するか確認する場合、find()メソッドを使用できます。
var iter = map.find(3);
if (iter) {
// the key is contained in the map
print(iter.key, iter.value);
} else {
// the key is not contained in the map
print("key not found");
}
マップの各要素を調べる場合、begin()メソッドおよびend()メソッドをforループで使用できます。
for (var iter = map.begin(); iter != map.end(); iter++) {
print(iter.key, iter.value);
}
別の方法として、keysプロパティを使用して配列内のすべてのキーにアクセスし、その配列でforループを使用することもできます。
Array keys = map.keys;
for (int i = 1; i <= keys.length; i++) {
print(keys[i], map[keys[i]]);
}
なお、keysプロパティは、マップ内のすべてのキーのコピーを使用して新しい配列を作成します。
begin()、end()、およびfind()
begin()、end()、およびfind()メソッドはすべてマップ反復子オブジェクトを返します。このオブジェクトには、次のプロパティおよび演算子があります。
- key - この反復子に参照されるキーです。
- value - この反復子に参照されるキーに関連付けられた値です。
- operator bool() - 反復子をブールとしてキャストすることで、反復子が有効であれば真をそうでない場合は偽を返します。
- operator++ - 反復子の値を増加させることで、反復子をマップ内の次のキーに移動させます。反復子がマップの最後に位置する場合、この演算子は反復子を無効にします。
キーとしてのノード
ツリーノードをキーとして使用できます。また、ツリーノードをキーとして格納するコンテナ(MapまたはArray)を使用することもできます。ただし、そのツリーノード(例:フローアイテム)が破棄された場合には、そのキーは失われたとみなされます。keys配列にはそれらのキーは含まれず、また、反復子オブジェクト(begin()、end()、およびfind()から返される)はそれらの値をスキップします。
キーの順序
Mapクラスはハッシュマップであり、マップ内のキーは順序が保証されません。比較によって並べ替えられておらず、また挿入順になっているわけでもありません。何らかの特殊な順序付けを当てにできるように見えたとしても、その順序はバグ修正リリースや新しいFlexSimバージョンによって容易く変化します。
プロパティ
keys | マップ内のすべてのキー値で構成される配列を返します。 |
stringKeys | 文字列キーに対する値を動的に取得および設定します。 |
values | マップ内のすべての関連付けられた値で構成される配列を返します。 |
メソッド
begin | 反復子をマップ内の最初のキー/値ペアに返します。 |
clear | Mapからキーおよび関連付けられた値をすべて削除します。 |
clone | Mapのディープコピーを返します。 |
end | 無効な反復子を返します。 |
find | 指定のキーが存在する場合はそのキーに対する反復子を返し、キーが存在しない場合は無効な反復子を返します。 |
remove | 指定のキーが存在する場合は、マップからそのキーおよび関連付けられた値を削除します。 |
演算子
!= | 2つのマップについて等価比較を行い、等しくない場合は真を返します。 |
[] | 指定のキーをアサートし、そのキーに関連付けられた値を返します。 |
= | 指定マップと同じデータをこのマップに代入します。 |
== | 2つのマップについて等価比較を行います。 |
詳細
Map.stringKeys
readonly stringKeys
説明
文字列キーに対する値を動的に取得および設定します。
ラベルを使用する場合と同様に、文字列キーに対する値を取得および設定することができます。// asserts the key "MyKey" and sets its value to 5
map.MyKey = 5;
// reads the value for the key "SKU_1"
// throws if "SKU_1" is not a key in the map
Variant value = map.SKU_1;
Map.end()
end( ) |
戻り値
無効な反復子 |
説明
無効な反復子を返します。
通常、このメソッドはforループ(for (var iter = map.begin(); iter != map.end(); iter++) { /*... */}
)の一部として使用します。ループ内で使用される反復子がマップの最後を越えて進行する場合、その反復子は無効化され、end()反復子と比較することで真を返します。