Conjuntos
O tipo Set: o literal {1, 2}, set(xs), a compreensão, as operações — e por que um Cluster não entra nele.
Um conjunto guarda valores sem repetição e sem ordem, e responde uma pergunta em tempo constante: este valor está aqui?. É o tipo certo para uma lista de permissões, para tirar duplicatas, e para comparar dois grupos.
dataforge
cores := {"azul", "verde", "azul"} // a repeticao some
assert len(cores) is 2
assert "verde" in cores
assert typeof(cores) is "Set"
vazio := set() // '{}' e o vault vazio
assert typeof(vazio) is "Set" and typeof({}) is "Vault"
assert set([3, 1, 3, 2]) is {1, 2, 3} // de uma lista
assert {n % 3 cycle n in range(0, 10)} is {0, 1, 2} // compreensao
xs := [1, 2]
assert {...xs, 9} is {1, 2, 9} // espalhando
out cores // sai em ordem: {azul, verde}As operações#
dataforge
dev := {"ana", "bia", "caio"}
ops := {"bia", "davi"}
assert dev.union(ops) is {"ana", "bia", "caio", "davi"} // em qualquer um
assert dev.intersection(ops) is {"bia"} // nos dois
assert dev.difference(ops) is {"ana", "caio"} // so no primeiro
assert dev.symmetric_difference(ops) is {"ana", "caio", "davi"}
assert {"bia"}.issubset(dev)
dev.add("eva")
dev.discard("ninguem") // 'discard' nao reclama do que nao existe
assert len(dev) is 4Anotar o tipo#
dataforge
permitidos: Set<String> := {"admin", "editor"}
assert "admin" in permitidos
// permitidos: Set<String> := {1} — recusado em execucao
// e o 'check' conhece 'Set' e 'Set<T>'Quando usar#
| Pergunta | Tipo | Custo de x in … |
|---|---|---|
| este valor está aqui?, muitas vezes | Set | O(1) |
| qual é o terceiro?, em que ordem? | Cluster | O(n) |
| quanto vale esta chave? | Vault | O(1) |
A diferença do in aparece com volume: ver Estruturas.