Словарь <Ключ: Hashable, Значение>
A Dictionary
универсальный тип, управляющий неупорядоченным набором пар ключ/значение. Все ключи словаря должны быть совместимы с его ключевым типом (Key
). Аналогично, все значения словаря должны быть совместимы с его типом значения (Value
).
Для получения дополнительной информации о Dictionary
, посмотрите Типы Набора.
Создание словаря
init ()
Создает пустой словарь.
Объявление
init()
Обсуждение
Создание словаря с помощью этого инициализатора:
var emptyDictionary = Dictionary<String: Int>()
эквивалентно использованию синтаксиса удобства:
var equivalentEmptyDictionary = [String: Int]()
init (minimumCapacity:)
Создает пустой словарь со способностью к, по крайней мере, конкретному количеству пар ключ/значение.
Объявление
init(minimumCapacity: Int)
Обсуждение
Можно создать словарь с помощью этого инициализатора путем указания значения для minimumCapacity
:
var emptyDictionary = Dictionary<String, Int>(minimumCapacity: 2)
// constructs an empty dictionary ready to contain at least two pairs of String keys and Int values
Обратите внимание на то, что фактическая способность, зарезервированная словарем, будет самым маленьким питанием 2, который больше, чем или равен значению, указанному для minimumCapacity
.
Доступ и изменение элементов словаря
нижний индекс (ключ: Ключ)
Получает, устанавливает или удаляет пару ключ/значение в словаре с помощью преобразования в нижний индекс квадратной скобки.
Объявление
subscript(key: Key) -> Value?
Обсуждение
Используйте преобразование в нижний индекс для доступа к отдельным элементам в любом словаре. Значение, возвращенное из нижнего индекса словаря, имеет тип Value?
— дополнительное с базовым типом словаря Value
:
var dictionary = ["one": 1, "two": 2, "three": 3]
let value = dictionary["two"]
// value is an optional integer with an underlying value of 2
В этом примере, value
имеет тип Int?
, нет Int
. Используйте дополнительную привязку, чтобы запросить и развернуть возвращаемое значение нижнего индекса словаря, если это не -nil
:
if let unwrappedValue = dictionary["three"] {
println("The integer value for \"three\" was: \(unwrappedValue)")
}
// prints "The integer value for "three" was: 3"
Можно также использовать преобразование в нижний индекс, чтобы изменить значение, связанное с существующим ключом в словаре, добавить новое значение или удалить значение для ключа путем установки его в nil
:
dictionary["three"] = 33
// dictionary is now ["one": 1, "two": 2, "three": 33]
dictionary["four"] = 4
// dictionary is now ["one": 1, "two": 2, "three": 33, "four": 4]
dictionary["three"] = nil
// dictionary is now ["one": 1, "two": 2, "four": 4]
Значения в словаре могут быть изменены, добавлены или удалены с преобразованием в нижний индекс, только если словарь определяется с помощью var
ключевое слово (т.е. если словарь является непостоянным):
let constantDictionary = ["one": 1, "two": 2, "three": 3]
constantDictionary["four"] = 4
// Error: cannot mutate a constant dictionary
updateValue (_: forKey:)
Если один существовал, или, вставляет или обновляет значение для данного ключа и возвращает предыдущее значение для того ключа nil
если не существовало предыдущее значение.
Объявление
mutating func updateValue(value: Value, forKey key: Key) -> Value?
Обсуждение
Используйте этот метод, чтобы вставить или обновить значение для данного ключа как альтернатива преобразованию в нижний индекс. Этот метод возвращает значение типа Value?
— дополнительное с базовым типом словаря Value
:
var dictionary = ["one": 1, "two": 2, "three": 3]
let previousValue = dictionary.updateValue(22, forKey: "two")
// previousValue is an optional integer with an underlying value of 2
В этом примере, previousValue
имеет тип Int?
, нет Int
. Используйте дополнительную привязку, чтобы запросить и развернуть возвращаемое значение, если это не -nil
:
if let unwrappedPreviousValue = dictionary.updateValue(33, forKey: "three") {
println("Replaced the previous value: \(unwrappedPreviousValue)")
} else {
println("Added a new value")
}
// prints "Replaced the previous value: 3"
Значения в словаре могут быть обновлены с помощью этого метода, только если словарь определяется с помощью var
ключевое слово (т.е. если словарь является непостоянным):
let constantDictionary = ["one": 1, "two": 2, "three": 3]
constantDictionary.updateValue(4, forKey: "four")
// Error: cannot mutate a constant dictionary
removeValueForKey (_:)
Удаляет пару ключ/значение для указанного ключа и возвращает его значение, или nil
если ранее не существовало значение для того ключа.
Объявление
mutating func removeValueForKey(key: Key) -> Value?
Обсуждение
Используйте этот метод для удаления значения для данного ключа как альтернатива присвоению значения nil
использование преобразования в нижний индекс. Этот метод возвращает значение типа Value?
— дополнительное с базовым типом словаря Value
:
var dictionary = ["one": 1, "two": 2, "three": 3]
let previousValue = dictionary.removeValueForKey("two")
// previousValue is an optional integer with an underlying value of 2
В этом примере, previousValue
имеет тип Int?
, нет Int
. Используйте дополнительную привязку, чтобы запросить и развернуть возвращаемое значение, если это не -nil
:
if let unwrappedPreviousValue = dictionary.removeValueForKey("three") {
println("Removed the old value: \(unwrappedPreviousValue)")
} else {
println("Didn't find a value for the given key to delete")
}
// prints "Removed the old value: 3"
Значения в словаре могут быть удалены с помощью этого метода, только если словарь определяется с помощью var
ключевое слово (т.е. если словарь является непостоянным):
let constantDictionary = ["one": 1, "two": 2, "three": 3]
constantDictionary.removeValueForKey("four")
// Error: cannot mutate a constant dictionary
removeAll (keepCapacity:)
Удаляет все пары ключ/значение из словаря, и по умолчанию разрешает буфер базовой системы хранения.
Объявление
mutating func removeAll(keepCapacity: Bool = default)
Обсуждение
Используйте этот метод для удаления всех пар ключ/значение в словаре:
var dictionary = ["one": 1, "two": 2, "three": 3]
dictionary.removeAll()
// dictionary is now an empty dictionary
Если Вы не укажете иначе, базовая внешняя память будет очищена.
Значения в словаре могут быть удалены с помощью этого метода, только если словарь определяется с помощью var
ключевое слово (т.е. если словарь является непостоянным):
let constantDictionary = ["one": 1, "two": 2, "three": 3]
constantDictionary.removeAll()
// Error: cannot mutate a constant dictionary
Запросы словаря
количество
Целочисленное значение, представляющее число пар ключ/значение в словаре (только для чтения).
Объявление
var count: Int { get }
Обсуждение
Используйте это свойство только для чтения для запросов числа элементов в словаре:
var dictionary = ["one": 1, "two": 2, "three": 3]
let elementCount = dictionary.count
// elementCount is 3
ключи
Возвращает неупорядоченный повторяемый набор всех ключей словаря (только для чтения).
Объявление
var keys: LazyBidirectionalCollection<MapCollectionView<[Key : Value], Key>> { get }
Обсуждение
Используйте это свойство только для чтения для получения повторяемого набора ключей словаря:
var dictionary = ["one": 1, "two": 2, "three": 3]
for key in dictionary.keys {
println("Key: \(key)")
}
// prints:
// Key: one
// Key: three
// Key: two
Использовать ключи словаря с API, берущим Array
экземпляр, инициализируйте новый массив с keys
свойство:
let array = Array(dictionary.keys)
// array is ["one", "three", "two"]
значения
Возвращает неупорядоченный повторяемый набор всех значений словаря (только для чтения).
Объявление
var values: LazyBidirectionalCollection<MapCollectionView<[Key : Value], Value>> { get }
Обсуждение
Используйте это свойство только для чтения для получения повторяемого набора значений словаря:
var dictionary = ["one": 1, "two": 2, "three": 3]
for value in dictionary.values {
println("Value: \(value)")
}
// prints:
// Value: 1
// Value: 3
// Value: 2
Для использования значений словаря с API, берущим экземпляр Массива инициализируйте новый массив с values
свойство:
let array = Array(dictionary.values)
// array is [1, 3, 2]
Операторы
==
Возвращает булево значение, указывающее, является ли содержание двух словарей тем же.
Объявление
func ==<Key: Equatable, Value: Equatable>(lhs: [Key: Value], rhs: [Key: Value]) -> Bool
Обсуждение
Оценивает к true
если эти два словаря содержат точно те же ключи и значения:
let dictionary1 = ["one": 1, "two": 2]
var dictionary2 = ["one": 1]
dictionary2["two"] = 2
let result = dictionary1 == dictionary2
// result is true
!=
Возвращает булево значение, указывающее, не является ли содержание двух словарей тем же.
Объявление
func !=<Key: Equatable, Value: Equatable>(lhs: [Key: Value], rhs: [Key: Value]) -> Bool
Обсуждение
Оценивает к true
если эти два словаря не содержат точно те же ключи и значения:
let dictionary1 = ["one": 1, "two": 2]
let dictionary2 = ["one": 1]
let result = dictionary1 != dictionary2
// result is true