Pular para o conteúdo

Coleções

Clusters e vaults: criação, acesso, fatiamento e os métodos mais usados.

Clusters — listas#

dataforge
nums := [10, 20, 30, 40, 50]

out nums[0]        # 10
out nums[-1]       # 50   — índice negativo conta do fim
out len(nums)      # 5

nums[1] := 99      # atribuição por índice

Fatiamento#

dataforge
l := [1, 2, 3, 4, 5]
out l[1:3]      # [2, 3]
out l[:2]       # [1, 2]
out l[3:]       # [4, 5]
out l[::2]      # [1, 3, 5]
out l[::-1]     # [5, 4, 3, 2, 1]

out "DataForge"[0:4]   # Data

A forma é [inicio:fim:passo], com fim exclusivo. Funciona em Cluster e em String.

Métodos#

GrupoMétodos
adicionarappend(x) insert(i, x) extend(outra)
removerremove(x) pop() pop(i) clear()
ordenarsort() reverse() reversed()
consultarcontains(x) index(x) count(x) first() last()
fatiartake(n) drop(n) slice(a, b) chunk(n) rotate(n)
transformarmap(f) filter(f) reduce(f, ini) flatten() unique()
testarevery(f) some(f) find(f)
agregarsum() min() max() mean() frequencies()
converterjoin(sep) copy()
dataforge
pilha := [3, 1, 2]
pilha.append(4)          # [3, 1, 2, 4]
pilha.sort()             # [1, 2, 3, 4]
out pilha.take(2)        # [1, 2]
out pilha.join(" - ")    # 1 - 2 - 3 - 4

Agregações globais#

dataforge
v := [120, 340, 90, 500, 210]
out sum(v), min(v), max(v)
out mean(v), median(v), round(stdev(v), 2)
out sorted(v), reversed(v), unique(v)

Vaults — dicionários#

dataforge
pessoa := {"nome": "Ana", "idade": 30}

out pessoa["nome"]     # acesso por chave
out pessoa.nome        # acesso por ponto — equivalente

pessoa["cidade"] := "Floripa"      # adiciona
pessoa["idade"] := 31              # atualiza

Métodos#

MétodoFaz
keys() values() items()as chaves, os valores, os pares
has(k) get(k, padrao)testa e lê com valor padrão
set(k, v) delete(k)escreve e remove
merge(outro)mescla, o outro vence
pick(a, b) omit(a)seleciona ou descarta chaves
invert()troca chaves por valores
map_values(f)transforma os valores
length() copy() clear()tamanho, cópia, limpeza
dataforge
v := {"a": 1, "b": 2}
out v.get("z", "padrao")            # padrao — sem estourar
out v.merge({"c": 3})               # {a: 1, b: 2, c: 3}
out v.map_values(lambda x: x * 10)  # {a: 10, b: 20}
out v.invert()                      # {1: a, 2: b}

Percorrendo#

dataforge
estoque := {"parafuso": 120, "porca": 80}

cycle chave in estoque.keys():
    out $"{chave}: {estoque[chave]}"

cycle par in estoque.items():
    out $"{par[0]} -> {par[1]}"

Escolhendo a estrutura#

Precisa de…Use
ordem e índiceCluster
acesso por chaveVault
dados nomeados e tipados`record`
conjunto fechado de valores`enum`
pilha, fila, grafo, heap`Arcane.Collections`