Menu
Coddy logo textTech

Atualizando Dicionários

Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 14 de 56.

Você escreve em um dicionário da mesma forma que lê de um: com o subscrito.

var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3                // adiciona a chave
prices["apple"] = 2                // atualiza uma chave existente
prices["apple"] = nil              // remove a chave

Dois métodos nomeados fazem a mesma coisa de forma mais explícita:

prices.updateValue(5, forKey: "milk") // retorna o valor antigo, ou nil
prices.removeValue(forKey: "bread")  // retorna o valor removido, ou nil

Os métodos nomeados retornam o valor anterior, o que é útil quando você precisa saber se a chave já existia.

O padrão de subscrito com valor padrão da lição anterior se encadeia perfeitamente com mutação; é assim que você constrói um contador sem escrever um if:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]
challenge icon

Desafio

Médio

Leia uma única linha de entrada: uma lista separada por vírgulas de operações em um dicionário inicial. Cada operação é uma das seguintes:

  • set:<key>:<value> adiciona ou atualiza (o valor é um número inteiro)
  • add:<key>:<value> adiciona o valor ao valor existente (use o padrão de subscrito padrão)
  • del:<key> remove a chave

Após aplicar cada operação em ordem a um [String: Int] inicialmente vazio, imprima as chaves em ordem alfabética, uma por linha, no formato <key>=<value>.

Para a entrada set:a:5,add:a:3,set:b:1,del:b,add:c:2, a saída é:

a=8
c=2

Folha de consulta

Modifique um dicionário usando subscrito ou métodos nomeados:

prices["bread"] = 3      // adicionar
prices["apple"] = 2      // atualizar
prices["apple"] = nil    // remover

prices.updateValue(5, forKey: "milk") // retorna o valor antigo ou nil
prices.removeValue(forKey: "bread")   // retorna o valor removido ou nil

Use o padrão de subscrito padrão para realizar mutações sem if:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]

Experimente você mesmo

let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]

// TODO: analisar cada op e aplicar set/add/del; imprimir chaves ordenadas com valores
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo