Menu
Coddy logo textTech

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    // 0

3. 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]
challenge icon

Wyzwanie

Łatwy

Dany 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 sold w 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: 8

Spró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
quiz iconSprawdź się

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

Poćwicz samodzielnie: Edytor online Swift