Swift - Словари
Swift 4 dictionariesиспользуются для хранения неупорядоченных списков значений одного типа. Swift 4 устанавливает строгую проверку, которая не позволяет вам ввести неправильный тип в словарь даже по ошибке.
В словарях Swift 4 используется уникальный идентификатор, известный как keyдля хранения значения, на которое позже можно будет ссылаться и искать его с помощью того же ключа. В отличие от элементов в массиве, элементы вdictionaryнет указанного заказа. Вы можете использоватьdictionary когда вам нужно искать значения на основе их идентификаторов.
Ключ словаря может быть целым числом или строкой без ограничений, но он должен быть уникальным в пределах словаря.
Если вы назначаете созданный словарь переменной, он всегда является изменяемым, что означает, что вы можете изменить его, добавляя, удаляя или изменяя его элементы. Но если вы назначите словарь константе, этот словарь будет неизменным, и его размер и содержимое не могут быть изменены.
Создание словаря
Вы можете создать пустой словарь определенного типа, используя следующий синтаксис инициализатора -
var someDict = [KeyType: ValueType]()
Вы можете использовать следующий простой синтаксис для создания пустого словаря, ключ которого будет иметь тип Int, а связанные значения будут строками:
var someDict = [Int: String]()
Вот пример создания словаря из набора заданных значений -
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
Инициализация на основе последовательности
Swift 4 позволяет создавать словарь из массивов (пары ключ-значение).
var cities = [“Delhi”,”Bangalore”,”Hyderabad”]
Вы можете использовать следующий простой синтаксис для создания пустого словаря, ключ которого будет иметь тип Int, а связанные значения будут строками:
var Distance = [2000,10, 620]
Вот пример создания словаря из набора заданных значений -
let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))
Приведенные выше строки кода создадут словарь с городами в качестве ключа и расстоянием в качестве значения -
Фильтрация
Swift 4 позволяет фильтровать значения из словаря.
var closeCities = cityDistanceDict.filter { $0.value < 1000 }
Если мы запустим приведенный выше код, наш словарь closeCities будет.
["Bangalore" : 10 , "Hyderabad" : 620]
Группировка словаря
Swift 4 позволяет создавать группировку значений словаря.
var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]
Вы можете использовать следующий простой синтаксис для группировки значений словаря по первому алфавиту.
var GroupedCities = Dictionary(grouping: cities ) { $0.first! }
Результатом приведенного выше кода будет
["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]
Доступ к словарям
Вы можете получить значение из словаря, используя синтаксис индекса, передав ключ значения, которое вы хотите получить, в квадратных скобках сразу после имени словаря следующим образом:
var someVar = someDict[key]
Давайте проверим следующий пример для создания, инициализации и доступа к значениям из словаря:
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])" )
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")
Изменение словарей
Вы можете использовать updateValue(forKey:)для добавления существующего значения к заданному ключу словаря. Этот метод возвращает необязательное значение типа значения словаря. Вот простой пример -
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])" )
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
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")
Вы можете изменить существующий элемент словаря, присвоив новое значение заданному ключу, как показано в следующем примере:
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])" )
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
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")
Удалить пары ключ-значение
Вы можете использовать removeValueForKey()для удаления пары ключ-значение из словаря. Этот метод удаляет пару «ключ-значение», если она существует, и возвращает удаленное значение или возвращает ноль, если значение не существует. Вот простой пример -
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])" )
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")
Вы также можете использовать синтаксис нижнего индекса для удаления пары ключ-значение из словаря, присвоив значение nilдля этого ключа. Вот простой пример -
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])" )
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")
Итерация по словарю
Вы можете использовать for-in цикл для перебора всего набора пар ключ-значение в Словаре, как показано в следующем примере:
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (index, keyValue) in someDict.enumerated() {
print("Dictionary key \(index) - Dictionary value \(keyValue)")
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One
Вы можете использовать enumerate() функция, которая возвращает индекс элемента вместе с его парой (ключ, значение), как показано ниже в примере -
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
print("Dictionary key \(key) - Dictionary value \(value)")
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
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")
Преобразовать в массивы
Вы можете извлечь список пар ключ-значение из заданного словаря, чтобы построить отдельные массивы для ключей и значений. Вот пример -
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)")
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One
Граф собственности
Вы можете использовать только для чтения count свойство словаря, чтобы узнать количество элементов в словаре, как показано ниже -
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)")
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Total items in someDict1 = 3
Total items in someDict2 = 2
Пустое свойство
Вы можете использовать только для чтения empty свойство словаря, чтобы узнать, пуст словарь или нет, как показано ниже -
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