Slide 20 de 37

Mapas

Definindo, obtendo e percorrendo
proc main(): void {
	mut hive.map.Map<Str, Int> counts = hive.map.new()
	hive.map.set(counts, "bees", 12)
	hive.map.set(counts, "hives", 3)

	if hive.map.get(counts, "bees") is Result.Ok(n) {
		echo n
	}
	echo hive.map.has(counts, "wasps")
	hive.map.delete(counts, "hives")
	echo hive.map.keys(counts)
	echo hive.map.values(counts)
}
Cruzando de e para uma Table
proc main(): void {
	mut hive.map.Map<Str, Str> labels = hive.map.new()
	hive.map.set(labels, "bees", "many")
	echo hive.map.toTable(labels)

	echo hive.map.get(hive.map.fromTable([["wasps", "few"]]), "wasps")
}
hive.map.Map<K, T> é a única coleção que não é um vetor. Uma chave é comparada e tem seu hash calculado por completo, então precisa ser uma Str, Int, Float, Bool, Atom, ou um tipo declarado cujos campos sejam todos um desses. new() diz apenas "vazio", então precisa chegar em algum lugar já tipado — uma declaração mut, aqui. set e delete precisam desse map mut; get responde por chave com um Result, has faz a mesma pergunta sem o valor, e keys/values percorrem na ordem em que as chaves foram definidas, o que torna dar echo em um reproduzível de execução para execução. fromTable e toTable cruzam de e para uma Table de linhas de duas células, para um map cujas chaves e valores são ambos Str.