Search
K
Links

# MAP

### Description

`MAP` is used to perform the same action on each individual value in a list.
That way, it lets you transform a list of values into another list, which comes in especially handy when working with user-provided values like `nationalities` or `sources_of_income`.
The keyword `CURRENT` inside the expression will be replaced with the current element of the list.

### Example: Double some numbers

SUM(
MAP([1, 2, 3], CURRENT * 2)
)
• Argument 1 is the list of values, here the array of numbers `[1, 2, 3]`.
• Argument 2, `CURRENT * 2`, takes each number from that array and multiplies it by 2. With each calculation, the keyword `CURRENT` is replaced by the next value from the list, until the last value has been dealt with.
• Since a SUM operator encloses the MAP function, the final output will be the added total of all doubled values - in this case: 12.
The calculations step-by-step:
• 1 * 2 = 2
• 2 * 2 = 4
• 3 * 2 = 6
• The intermediate result of MAP is the new list [2, 4, 6]
• SUM adds these new values: 2 + 4 + 6 = 12.

### Example: Get total income

p is Person
SUM(
MAP(
p.sources_of_income,
get_attr(CONCAT("income_" , CURRENT))
)
)
Here:
1. 1.
we assume a user selects the relevant sources of income out of `salary`, `capital_gain`, and `gifts`
2. 2.
the user then fills out the information with predictable keys, like `income_salary`, `income_capital_gain`, and `income_gifts`.
3. 3.
with `get_attr`, these values are accessed and added up. If a value has no entry from the user, its default will be 0.
The calculations step-by-step:
• the first argument of `MAP` is `self.sources_of_income`.
• let's say the user has filled out 10,000 under `income_salary`, 5000 under `income_capital_gain`, and nothing under `income_gifts`.
• the values of the first argument, which `MAP` will run over in succession, are salary, capital gain, and gifts.
• in the first iteration, the first argument of `MAP`, `self.sources_of_income`, gets the value `salary`.
• Next, `CURRENT` in the second argument takes that value `salary` from the first argument. `CONCAT `attaches it to the string "income_".
• This means the first run of the `MAP` function looks like this: `MAP(self.salary, get_attr(income_salary)`
• Using the values the user has provided, the `MAP` function will store 10,000 as the first value of its output. `MAP` then starts its work over on the second value in the list capital gain.
• Once `MAP` has run over all values in the list, it’s intermediate output will be `[10000, 5000, 0]`
• Since `MAP` is wrapped in a `SUM` function, the final output yields 15000.
Last modified 1yr ago