Swift - Słowniki
Szybki 4 dictionariessłużą do przechowywania nieuporządkowanych list wartości tego samego typu. Swift 4 stawia ścisłe sprawdzanie, które nie pozwala na wprowadzenie niewłaściwego typu do słownika nawet przez pomyłkę.
Słowniki Swift 4 używają unikalnego identyfikatora znanego jako keyaby zapisać wartość, do której można się później odwołać i wyszukać za pomocą tego samego klucza. W przeciwieństwie do elementów w tablicy, elementy w plikudictionarynie mają określonego zamówienia. Możesz użyćdictionary kiedy musisz wyszukać wartości na podstawie ich identyfikatorów.
Klucz słownika może być liczbą całkowitą lub łańcuchem bez ograniczeń, ale powinien być unikalny w obrębie słownika.
Jeśli przypiszesz utworzony słownik do zmiennej, to jest on zawsze zmienny, co oznacza, że możesz go zmienić, dodając, usuwając lub zmieniając jego elementy. Ale jeśli przypiszesz słownik do stałej, słownik ten jest niezmienny i nie można zmienić jego rozmiaru i zawartości.
Tworzenie słownika
Możesz utworzyć pusty słownik określonego typu, używając następującej składni inicjatora -
var someDict = [KeyType: ValueType]()
Możesz użyć następującej prostej składni, aby utworzyć pusty słownik, którego klucz będzie typu Int, a powiązane wartości będą ciągami -
var someDict = [Int: String]()
Oto przykład tworzenia słownika z zestawu podanych wartości -
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
Inicjalizacja oparta na sekwencji
Swift 4 umożliwia tworzenie słownika z tablic (par klucz-wartość).
var cities = [“Delhi”,”Bangalore”,”Hyderabad”]
Możesz użyć następującej prostej składni, aby utworzyć pusty słownik, którego klucz będzie typu Int, a powiązane wartości będą ciągami -
var Distance = [2000,10, 620]
Oto przykład tworzenia słownika z zestawu podanych wartości -
let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))
Powyższe linie kodu utworzą słownik z Miastami jako kluczem i Odległość jako wartością -
Filtracja
Swift 4 umożliwia filtrowanie wartości ze słownika.
var closeCities = cityDistanceDict.filter { $0.value < 1000 }
Jeśli uruchomimy powyższy kod, to nasz słownik closeCities będzie.
["Bangalore" : 10 , "Hyderabad" : 620]
Grupowanie słowników
Swift 4 umożliwia grupowanie wartości Dictionary.
var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]
Możesz użyć następującej prostej składni, aby pogrupować wartości słownika według pierwszego alfabetu.
var GroupedCities = Dictionary(grouping: cities ) { $0.first! }
Wynik powyższego kodu będzie
["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]
Dostęp do słowników
Możesz pobrać wartość ze słownika, używając składni indeksu dolnego, przekazując klucz wartości, którą chcesz pobrać, w nawiasach kwadratowych bezpośrednio po nazwie słownika w następujący sposób:
var someVar = someDict[key]
Sprawdźmy następujący przykład, aby utworzyć, zainicjować i uzyskać dostęp do wartości ze słownika -
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])" )
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")
Modyfikowanie słowników
Możesz użyć updateValue(forKey:)metoda, aby dodać istniejącą wartość do danego klucza słownika. Ta metoda zwraca opcjonalną wartość typu wartości słownika. Oto prosty przykład -
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])" )
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
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")
Możesz zmodyfikować istniejący element słownika, przypisując nową wartość do danego klucza, jak pokazano w poniższym przykładzie -
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])" )
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
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")
Usuń pary klucz-wartość
Możesz użyć removeValueForKey()metoda usuwania pary klucz-wartość ze słownika. Ta metoda usuwa parę klucz-wartość, jeśli istnieje, i zwraca usuniętą wartość lub zwraca nil, jeśli żadna wartość nie istnieje. Oto prosty przykład -
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])" )
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")
Możesz również użyć składni indeksu dolnego, aby usunąć parę klucz-wartość ze słownika, przypisując wartość nildla tego klucza. Oto prosty przykład -
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])" )
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")
Iteracja po słowniku
Możesz użyć for-in pętla do iteracji w całym zestawie par klucz-wartość w słowniku, jak pokazano w poniższym przykładzie -
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (index, keyValue) in someDict.enumerated() {
print("Dictionary key \(index) - Dictionary value \(keyValue)")
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One
Możesz użyć enumerate() funkcja, która zwraca indeks elementu wraz z jego parą (klucz, wartość), jak pokazano poniżej w przykładzie -
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
print("Dictionary key \(key) - Dictionary value \(value)")
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
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")
Konwertuj na tablice
Możesz wyodrębnić listę par klucz-wartość z danego słownika, aby utworzyć oddzielne tablice dla kluczy i wartości. Oto przykład -
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)")
}
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One
Hrabia Property
Możesz użyć tylko do odczytu count właściwość słownika, aby znaleźć liczbę elementów w słowniku, jak pokazano poniżej -
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)")
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Total items in someDict1 = 3
Total items in someDict2 = 2
Pusta nieruchomość
Możesz użyć tylko do odczytu empty właściwość słownika, aby sprawdzić, czy słownik jest pusty, czy nie, jak pokazano poniżej -
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)")
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
someDict1 = false
someDict2 = false
someDict3 = true