6.7 Map Comprehension

Map comprehension in Haxe uses existing syntax to allow concise initialization for `Map`. Maps are initialized like arrays, but use the map literal syntax with the `=>` operator. It is identified by `for` or `while` constructs:

```class Main {
static public function main() {
var a = [for (i in 0...5) i => 'number \${i}'];
trace(a); // {0 => number 0, 1 => number 1, 2 => number 2, 3 => number 3, 4 => number 4}

var i = 0;
var b = [while(i < 5) i => 'number \${i++}'];
trace(b); // {0 => number 0, 1 => number 1, 2 => number 2, 3 => number 3, 4 => number 4}
}
}
```

Variable `a` is initialized to an `Map` holding keys from 0 to 4 and string values. The compiler generates code which adds the value of each loop iteration to the map, so the following code would be equivalent:

```var a = new Map();
for (i in 0...5) a.set(i, 'number \${i}');
```

Variable `b` is initialized to an `Map` with the same keys and values, but through a different comprehension style using `while` instead of `for`. Again, the following code would be equivalent:

```var i = 0;
var b = new Map();
while(i < 5) b.set(i, 'number \${i++}');
```

The loop expression can be anything, including conditions and nested loops, so the following works as expected:

```class Main {
static public function main() {
var a = [
for (x in 0...5)
for(y in 0...5)
if (x != y)
x => y
];
// {0 => 4, 1 => 4, 2 => 4, 3 => 4, 4 => 3}
trace(a);
}
}
```