Maps

Keys can be strings, integers, runes, enums, and some other comparable types. Maps keep insertion order when iterating.

mut ages := map[string]int{}
ages['Ana'] = 30
ages['Bo'] = 25
m := {'one': 1, 'two': 2}           // literal
println(ages['Ana'])
println(ages['missing'])            // 0 (zero value) for missing keys
val := ages['Zed'] or { -1 }        // explicit default / error handling
if age := ages['Bo'] { println(age) }
println('Ana' in ages)
ages.delete('Bo')
println(ages.len)
println(ages.keys())
println(ages.values())
for name, age in ages { println('${name}: ${age}') }   // insertion order is preserved
copy := ages.clone()
ages.clear()

mut nested := map[string]map[string]int{}
nested['a'] = {'x': 1}
mut counts := map[string]int{}
for word in 'a b a c a'.split(' ') { counts[word]++ }