Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

How to update X++ map

Writer Emily Wong

I would like to change value for the key in map. How can I do it? Is it possible?

I have found only method insert(_key,_value) but I don't want to create new key with value, but change the value for the existing key.

2 Answers

How to edit the key

Just remove the old key, then reinsert with the new key.

map = new Map(Types::String,Types::Real)
map.insert("a", 1);
map.insert("b", 2);
map.insert("c", 3);
map.remove("b"); // remove key
map.insert("y", 2); // reinsert new key with value

How to edit the value

Just reinsert the value with insert. The key cannot have duplicates, instead it overwrites.

Return Value
Type: boolean
true if the key did not already exist in the map and has been inserted; otherwise, false.
Remarks
If the key already exists in the map, the value is updated.

For example to manually sum line amount grouping on item group:

Map map = new Map(Types::String,Types::Real);
SalesLine sl;
while select sl where sl.SalesId == "123"
{ map.insert(sl.ItemGroup, sl.LineAmount + (map.exists(sl.ItemGroup) ? map.lookup(sl.ItemGroup) : 0);
}

Is equivalent to but performance-wise inferior to:

select sum(LineAmount) sl group ItemGroup where sl.SalesId == "123";

There is no need to remove a key before you insert another value that is to update a key's value. You simply call insert() again.

'insert()' would more accurately be called 'upsert()' in SQL terminology.

Map mymap;
mymap.insert('a',1.0);
mymap.insert('a',1.1);
info(strFmt('%1',mymap.lookup('a'))); // will return '1.1'

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.