Словарь 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
Другие расширения