Wyszukiwanie opcjonalne
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 13 z 56.
Indeksowanie słownika zawsze zwraca wartość typu Optional: wartość, gdy klucz istnieje, nil, gdy go nie ma. Swift wymaga obsłużenia obu przypadków.
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)Trzy idiomatyczne sposoby radzenia sobie z wartością opcjonalną. Wybierz ten, który pasuje do sytuacji.
1. if let: obsłuż jawnie obie gałęzie:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. Operator nil-coalescing ??: podaj wartość zastępczą w jednej linii:
let p = prices["olive"] ?? 0 // 03. indeks dolny z wartością domyślną: identyczny wynik, ale wartość domyślna pozostaje również wtedy, gdy zapiszesz coś pod tym kluczem:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]Wyzwanie
ŁatwyDany jest słownik prices. Wczytaj jeden wiersz danych wejściowych: listę produktów, które użytkownik chce kupić, rozdzielonych przecinkami.
Dla każdego produktu, w kolejności podanej na wejściu, wyszukaj go w prices. Wypisz jeden wiersz dla każdego produktu:
<item> @ <price>, gdy produkt znajduje się w słowniku<item> not soldw przeciwnym razie
Po wyświetleniu wszystkich produktów wypisz jeden ostatni wiersz: Total: <sum>. Przyjmij, że brakujące produkty kosztują 0, używając operatora nil-coalescing.
Dla wejścia apple,bread,olive,milk wynikiem jest:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8Spróbuj swoich sił
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO: wyszukaj cenę każdego produktu; wypisz '@ price' lub 'not sold'; zsumuj wartości, używając ?? 0
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słów3Słowniki
Deklarowanie słownikówWyszukiwanie opcjonalneAktualizowanie słownikówIterowanie po słownikachGrupowanie wartościPodsumowanie – inwentarz6Funkcje wyższego rzędu, cz. 2
compactMapflatMapsorted(by:)Tworzenie potokówPowtórzenie – tabela wynikówPoćwicz samodzielnie: Edytor online Swift