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つのマップについて等価比較を行います。

詳細

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.keys

readonly Array keys

説明

マップ内のすべてのキー値で構成される配列を返します。

この配列はすべてのキー値の新しいコピーとなります。keysおよびvaluesの両方が割り込み挿入または削除なしにアクセスされた場合、結果として得られる配列も同じ順序になります。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

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;
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.values

readonly Array values

説明

マップ内のすべての関連付けられた値で構成される配列を返します。

この配列はすべての関連付けられた値の新しいコピーとなります。keysおよびvaluesの両方が割り込み挿入または削除なしにアクセスされた場合、結果として得られる配列も同じ順序になります。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.begin()

begin( )

戻り値

マップ内の最初のキー/値ペアに対する反復子

説明

反復子をマップ内の最初のキー/値ペアに返します。

マップが空の場合、このメソッドはend()と等しい反復子を返します。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.clear()

clear( )

説明

Mapからキーおよび関連付けられた値をすべて削除します。

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.clone()

Map clone( )

戻り値

Map マップのコピー

説明

Mapのディープコピーを返します。

Map map1;
Map map2 = map1; // map2 points at the same map as map1
map1[10] = 2; // map2 can access the key 10
Map map3 = map1.clone();
map3[20]; // does not affect map1 or map2
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.end()

end( )

戻り値

無効な反復子

説明

無効な反復子を返します。

通常、このメソッドはforループ(for (var iter = map.begin(); iter != map.end(); iter++) { /*... */})の一部として使用します。ループ内で使用される反復子がマップの最後を越えて進行する場合、その反復子は無効化され、end()反復子と比較することで真を返します。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.find()

find( Variant key )

パラメータ

key マップ内で調べるキー

戻り値

キーがマップにない場合には無効になる反復子。

説明

指定のキーが存在する場合はそのキーに対する反復子を返し、キーが存在しない場合は無効な反復子を返します。

このメソッドは指定のキーをマップに追加しないため、キーを追加することなく調べる際に使用できます。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.remove()

int remove( Variant key )

パラメータ

key 削除するキー

戻り値

int キーが削除された場合は真、キーが存在していなかった場合は偽。

説明

指定のキーが存在する場合は、マップからそのキーおよび関連付けられた値を削除します。

削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.operator !=

int operator !=( Map )

パラメータ

このマップと比較するマップ

戻り値

int マップが等しくない場合は真

説明

2つのマップについて等価比較を行い、等しくない場合は真を返します。

==演算子の逆を返します。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.operator []

Variant operator []( Variant key )
Variant operator []( Map key )

パラメータ

key 関連付けられた値の取得で使用するキー

戻り値

Variant keyと関連付けられた値

説明

指定のキーをアサートし、そのキーに関連付けられた値を返します。

マップに存在しないキーは追加され、そのキーに関連付けられた値はnullバリアントに設定されます。参照によって値が返され、変更することができます。map[10] += 1; // increments the value for key 10 by 1
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.operator =

Map operator =( Variant )

パラメータ

このマップを代入するマップ

戻り値

Map 代入されたマップ

説明

指定マップと同じデータをこのマップに代入します。

代入後は、両方のマップ変数が同じMapオブジェクトを示すようになります。この代入はシャローです。
削除を行わないでください。doc.flexsim.comのアンカーが修正されます。

Map.operator ==

int operator ==( Map )

パラメータ

このマップと比較するマップ

戻り値

int マップが等しい場合は真

説明

2つのマップについて等価比較を行います。

両方が同じMapオブジェクトを示すか、両方が持つ一連のキーが同じですべてのキーで値が等しい場合は、2つのマップは等しいです。