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