Sobes.tech
Middle

Como é estruturado um dicionário em Swift?

sobes.tech IA

Resposta da IA

O dicionário (Dictionary) em Swift representa uma coleção de pares "chave-valor" não ordenados.

Características principais:

  • Não ordenados: A ordem dos elementos não é garantida.
  • Chaves únicas: Cada chave no dicionário deve ser única.
  • Chaves hasháveis: O tipo de chave deve ser hashable (ou seja, cumprir o protocolo Hashable). Tipos como String, Int, Double, Bool e a maioria das estruturas são hashables por padrão.
  • Tipagem: O dicionário é estritamente tipado, tanto para chaves quanto para valores.
  • Armazenamento: Implementado com base em uma tabela hash, o que garante alta eficiência nas operações de inserção, remoção e acesso por chave (em média O(1)).

Criação de dicionários:

// Dicionário vazio
var emptyDictionary: [String: Int] = [:]

// Dicionário com valores iniciais
let cities: [String: String] = [
    "London": "UK",
    "Paris": "France",
    "Tokyo": "Japan"
]

Acesso e modificação:

// Acesso por chave (retorna um Optional)
let country = cities["Paris"] // Optional("France")

// Adicionar ou atualizar valor
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Adição
scores["Alice"] = 105 // Atualização

// Remover valor
scores["Bob"] = nil // Remoção do elemento com chave "Bob"

Iteração:

for (city, country) in cities {
    print("\(city) está em \(country)")
}

for city in cities.keys {
    print("Cidade: \(city)")
}

for country in cities.values {
    print("País: \(country)")
}

Estrutura interna (geralmente):

Swift usa uma implementação modificada de tabela hash. Ao inserir um par "chave-valor":

  1. O valor hash da chave é calculado.
  2. O valor hash é usado para determinar a "cesta" (bucket) na qual o elemento deve ser colocado.
  3. Se já houver elementos na cesta, um mecanismo de resolução de colisões (por exemplo, cadeias ou endereçamento aberto) é usado para encontrar um local adequado.

O desempenho da maioria das operações (inserção, remoção, acesso) é próximo de O(1) quando os hashes estão distribuídos uniformemente e há poucas colisões. No pior caso (todos os hashes caem em uma única cesta), o desempenho pode degradar para O(n), mas isso é raro com boas funções de hash e tamanho suficiente da tabela hash. Quando o número de elementos aumenta, o dicionário pode realizar rehashing (rehashing), aumentando o tamanho da estrutura interna para manter a eficiência, o que pode ser uma operação relativamente custosa.