Swift - Dicionários

Swift 4 dictionariessão usados ​​para armazenar listas não ordenadas de valores do mesmo tipo. O Swift 4 faz uma verificação estrita que não permite que você insira um tipo errado em um dicionário, mesmo por engano.

Os dicionários Swift 4 usam identificador único conhecido como keypara armazenar um valor que posteriormente pode ser referenciado e pesquisado através da mesma chave. Ao contrário dos itens em uma matriz, os itens em umdictionarynão tem um pedido especificado. Você pode usar umdictionary quando você precisa procurar valores com base em seus identificadores.

Uma chave de dicionário pode ser um inteiro ou uma string sem restrição, mas deve ser única dentro de um dicionário.

Se você atribuir um dicionário criado a uma variável, ele será sempre mutável, o que significa que você pode alterá-lo adicionando, removendo ou alterando seus itens. Mas se você atribuir um dicionário a uma constante, então esse dicionário é imutável e seu tamanho e conteúdo não podem ser alterados.

Criando Dicionário

Você pode criar um dicionário vazio de um certo tipo usando a seguinte sintaxe de inicializador -

var someDict = [KeyType: ValueType]()

Você pode usar a seguinte sintaxe simples para criar um dicionário vazio cuja chave será do tipo Int e os valores associados serão strings -

var someDict = [Int: String]()

Aqui está um exemplo para criar um dicionário a partir de um conjunto de valores dados -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

Inicialização baseada em sequência

O Swift 4 permite que você crie Dicionário a partir de matrizes (pares de valores-chave).

var cities = [“Delhi”,”Bangalore”,”Hyderabad”]

Você pode usar a seguinte sintaxe simples para criar um dicionário vazio cuja chave será do tipo Int e os valores associados serão strings -

var Distance = [2000,10, 620]

Aqui está um exemplo para criar um dicionário a partir de um conjunto de valores dados -

let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))

As linhas de código acima criarão um dicionário com Cidades como chave e Distância como Valor -

Filtrando

O Swift 4 permite filtrar valores de um dicionário.

var closeCities = cityDistanceDict.filter { $0.value < 1000 }

Se executarmos o código acima, nosso dicionário closeCities será.

["Bangalore" : 10 , "Hyderabad" : 620]

Agrupamento de Dicionário

O Swift 4 permite que você crie agrupamento de valores de Dicionário.

var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]

Você pode usar a seguinte sintaxe simples para agrupar os valores do dicionário de acordo com o primeiro alfabeto.

var GroupedCities = Dictionary(grouping: cities ) { $0.first! }

O resultado do código acima será

["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]

Acessando Dicionários

Você pode recuperar um valor de um dicionário usando a sintaxe do subscrito, passando a chave do valor que deseja recuperar entre colchetes imediatamente após o nome do dicionário da seguinte maneira -

var someVar = someDict[key]

Vamos verificar o exemplo a seguir para criar, inicializar e acessar valores de um dicionário -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someVar = someDict[1]

print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Modificando Dicionários

Você pode usar updateValue(forKey:)método para adicionar um valor existente a uma determinada chave do dicionário. Este método retorna um valor opcional do tipo de valor do dicionário. Aqui está um exemplo simples -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("New value of one", forKey: 1)
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Você pode modificar um elemento existente de um dicionário atribuindo um novo valor em uma determinada chave, conforme mostrado no exemplo a seguir -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict[1]
someDict[1] = "New value of one"
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

Remover pares de valores-chave

Você pode usar removeValueForKey()método para remover um par de valores-chave de um dicionário. Este método remove o par de valor-chave se ele existir e retorna o valor removido ou retorna nulo se nenhum valor existia. Aqui está um exemplo simples -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var removedValue = someDict.removeValue(forKey: 2)

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

Você também pode usar a sintaxe do subscrito para remover um par de valores-chave de um dicionário atribuindo um valor de nilpara essa chave. Aqui está um exemplo simples -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

someDict[2] = nil

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

Iterando em um Dicionário

Você pode usar um for-in loop para iterar em todo o conjunto de pares de valores-chave em um Dicionário, conforme mostrado no exemplo a seguir -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

for (index, keyValue) in someDict.enumerated() {
   print("Dictionary key \(index) - Dictionary value \(keyValue)")
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One

Você pode usar enumerate() função que retorna o índice do item junto com seu par (chave, valor), conforme mostrado abaixo no exemplo -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
   print("Dictionary key \(key) - Dictionary value \(value)")
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Dictionary key 0 - Dictionary value (key: 2, value: "Two")
Dictionary key 1 - Dictionary value (key: 3, value: "Three")
Dictionary key 2 - Dictionary value (key: 1, value: "One")

Converter para matrizes

Você pode extrair uma lista de pares de valores-chave de um determinado dicionário para construir matrizes separadas para chaves e valores. Aqui está um exemplo -

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

print("Print Dictionary Keys")

for (key) in dictKeys {
   print("\(key)")
}
print("Print Dictionary Values")

for (value) in dictValues {
   print("\(value)")
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One

A propriedade de contagem

Você pode usar o modo somente leitura count propriedade de um dicionário para descobrir o número de itens em um dicionário, conforme mostrado abaixo -

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]

print("Total items in someDict1 = \(someDict1.count)")
print("Total items in someDict2 = \(someDict2.count)")

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Total items in someDict1 = 3
Total items in someDict2 = 2

A propriedade vazia

Você pode usar somente leitura empty propriedade de um dicionário para descobrir se um dicionário está vazio ou não, conforme mostrado abaixo -

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
var someDict3:[Int:String] = [Int:String]()

print("someDict1 = \(someDict1.isEmpty)")
print("someDict2 = \(someDict2.isEmpty)")
print("someDict3 = \(someDict3.isEmpty)")

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

someDict1 = false
someDict2 = false
someDict3 = true