Словарь Swift
Словари Swift используются для хранения неупорядоченных коллекций данных одного типа. Словари Swift обеспечивают проверку типов элементов, и при несовпадении типов возникнет ошибка.
В словаре Swift каждое значение связано с уникальным ключом, и ключ служит идентификатором данных этого значения в словаре.
В отличие от элементов данных в массиве, элементы данных в словаре не имеют определённого порядка. Мы используем словарь, когда нам нужно получить доступ к данным по идентификатору (ключу). Этот подход во многом похож на то, как мы используем словарь в реальном мире для поиска значений слов.
Ключи словаря Swift не имеют ограничений по типу и могут быть целыми числами или строками, но должны быть уникальными.
Если вы создаёте словарь и присваиваете его переменной, словарь будет изменяемым. Это означает, что после создания словаря вы можете изменять его элементы, добавляя, удаляя или модифицируя их. Если вы присваиваете словарь константе, словарь является неизменяемым, и ни его размер, ни содержимое нельзя изменить.
Создание словаря
Мы можем использовать следующий синтаксис для создания пустого словаря определённого типа:
var someDict = [KeyType: ValueType]()
Ниже приведён простой синтаксис для создания пустого словаря с ключами типа Int и значениями типа String:
var someDict = [Int: String]()
Ниже приведён пример создания словаря:
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
Доступ к словарю
Мы можем получить доступ к элементам словаря с помощью индекса словаря, синтаксис следующий:
var someVar = someDict[key]
Мы можем узнать, как создать, инициализировать и получить доступ к словарю, на следующем примере:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var someVar = someDict[1] print( "key = 1 的值为 \(someVar)" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
Вывод выполнения вышеуказанной программы:
key = 1 的值为 Optional("One")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
Изменение словаря
Мы можем использоватьupdateValue(forKey:), чтобы добавить или обновить содержимое словаря. Если ключ не существует, значение добавляется; если он существует, значение, соответствующее ключу, изменяется. Метод updateValue(_:forKey:) возвращает значение Optional. Пример следующий:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("One 新的值", forKey: 1)
var someVar = someDict[1]
print( "key = 1 旧的值 \(oldVal)" )
print( "key = 1 的值为 \(someVar)" )
print( "key = 2 的值为 \(someDict[2])" )
print( "key = 3 的值为 \(someDict[3])" )
Вывод выполнения вышеуказанной программы:
key = 1 旧的值 Optional("One")
key = 1 的值为 Optional("One 新的值")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
Вы также можете изменить значение в словаре, используя указанный ключ, как показано ниже:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var oldVal = someDict[1] someDict[1] = "One 新的值" var someVar = someDict[1] print( "key = 1 旧的值 \(oldVal)" ) print( "key = 1 的值为 \(someVar)" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
Вывод выполнения вышеуказанной программы:
key = 1 旧的值 Optional("One")
key = 1 的值为 Optional("One 新的值")
key = 2 的值为 Optional("Two")
key = 3 的值为 Optional("Three")
Удаление пар ключ-значение
Мы можем использовать методremoveValueForKey(), чтобы удалить пару ключ-значение из словаря. Если ключ существует, метод возвращает удалённое значение; если нет, он возвращает nil. Пример следующий:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] var removedValue = someDict.removeValue(forKey: 2) print( "key = 1 的值为 \(someDict[1])" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
Вывод выполнения вышеуказанной программы:
key = 1 的值为 Optional("One")
key = 2 的值为 nil
key = 3 的值为 Optional("Three")
Вы также можете удалить пару ключ-значение, установив значение указанного ключа равным nil. Пример следующий:
import Cocoa var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"] someDict[2] = nil print( "key = 1 的值为 \(someDict[1])" ) print( "key = 2 的值为 \(someDict[2])" ) print( "key = 3 的值为 \(someDict[3])" )
Вывод выполнения вышеуказанной программы:
key = 1 的值为 Optional("One")
key = 2 的值为 nil
key = 3 的值为 Optional("Three")
Перебор словаря
Мы можем использовать циклfor-inдля перебора пар ключ-значение в словаре. Пример:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict {
print("字典 key \(key) - 字典 value \(value)")
}
Вывод выполнения вышеуказанной программы:
字典 key 2 - 字典 value Two 字典 key 3 - 字典 value Three 字典 key 1 - 字典 value One
Мы также можем использовать метод enumerate() для перебора словаря, который возвращает индекс словаря вместе с парами (ключ, значение). Пример:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
print("字典 key \(key) - 字典 (key, value) 对 \(value)")
}
Вывод выполнения вышеуказанной программы:
字典 key 0 - 字典 (key, value) 对 (2, "Two") 字典 key 1 - 字典 (key, value) 对 (3, "Three") 字典 key 2 - 字典 (key, value) 对 (1, "One")
Преобразование словаря в массив
Вы можете извлечь пары ключ-значение словаря и преобразовать их в отдельные массивы. Пример:
import Cocoa
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)
print("输出字典的键(key)")
for (key) in dictKeys {
print("\(key)")
}
print("输出字典的值(value)")
for (value) in dictValues {
print("\(value)")
}
Вывод выполнения вышеуказанной программы:
输出字典的键(key) 2 3 1 输出字典的值(value) Two Three One
Свойство count
Мы можем использовать доступное только для чтения свойствоcount, чтобы подсчитать, сколько пар ключ-значение содержит словарь:
import Cocoa
var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
print("someDict1 含有 \(someDict1.count) 个键值对")
print("someDict2 含有 \(someDict2.count) 个键值对")
Вывод выполнения вышеуказанной программы:
someDict1 含有 3 个键值对 someDict2 含有 2 个键值对
Свойство isEmpty
Мы можем использовать доступное только для чтения свойствоisEmpty, чтобы определить, пуст ли словарь, возвращая логическое значение:
import Cocoa
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)")
Вывод выполнения вышеуказанной программы:
someDict1 = false someDict2 = false someDict3 = trueДругие расширения