Axaptapedia is now maintained by AgileCadence For more information please click here.

Map Class

From Axaptapedia
Jump to: navigation, search

Map (Foundation class) consist of a data set that contains a key and a corresponding value, where the key is unique. The key and the value need not be from the same data type.

A Map is always sorted on the key value.

How to use

Define

<xpp> Map m = new Map(Types::STRING, Types::INTEGER); </xpp> or <xpp> Map m = new Map(typeId2Type(typeid(recId)), Types::Record); </xpp>

Insert a value

<xpp> m.insert("Wassini", 37); m.insert("Eric", 102); </xpp>

Exists value

To see if a value already is added, use the exists method: <xpp> if (m.exists("Wassini"))

  print "Yes!";

else

  print "No!";

</xpp>

Lookup value

To get the value linked to a specific key use the lookup method: <xpp> Integer i;

i = m.lookup("Wassini")) </xpp> If key don't exist in map lookup function throw error so is better to test before is key exist

Getting values

There are several ways to get the values in the map.

  1. Using a MapIterator
  2. Using a MapEnumerator
  3. Using a direct method

MapIterator

The MapIterator loops throug the complete map:

<xpp> MapIterator mi;

mi = new MapIterator(m);

while (mi.more()) {

 print mi.key();
 print mi.value();
 mi.next();

} </xpp>

MapEnumerator

MapEnumerator Class is like MapIterator Class, but does not allow the deletion of elements during enumeration. MapEnumerator Class automatically created on the same tier as the Map Class, and MapIterator does not. <xpp> MapEnumerator me = m.getEnumerator();

while (me.moveNext()) {

 print me.currentKey();
 print me.currentValue();

} </xpp>

Direct method

It is possible to get find a specific value from the key:

<xpp> print m.lookup("Wassini"); </xpp>

Removing values

Just use the remove method to remove the active key/value pair.

<xpp> m.remove("Wassini"); </xpp>

Updating values

It is not possible to update a value directly: <xpp> int age; str keyid = "Wassini";

age = m.exists(keyid) ? m.lookup(keyid) : 0; m.insert(keyid, age + 1); </xpp>

Other methods

<xpp> // Get number of elements: print m.elements();

// Get the used types: print m.definitionString();

// Dump the whole map as a string: print m.toString(); </xpp>

Passing across tiers

As with other foundation classes, the Map can be passed across tiers by converting it to a container. The pack method converts it to a container: <xpp> container packedMap = m.pack(); </xpp> To convert the packed container back to a Map, call the static create method of the Map class: <xpp> Map map = Map::create(packedMap); </xpp>

See also