Menu
Coddy logo textTech

Różnica i różnica symetryczna

Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 20 z 56.

Dwie kolejne operacje na zbiorach dopełniają zestaw narzędzi.

subtracting zwraca elementy pierwszego zbioru, których nie ma w drugim:

let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b)             // {1, 2}

symmetricDifference zwraca elementy, które należą do dokładnie jednego z dwóch zbiorów, nigdy do obu:

a.symmetricDifference(b)     // {1, 2, 5}

Razem z union i intersection te cztery operacje obejmują wszystkie zagadnienia z algebry zbiorów, z którymi spotkasz się na co dzień.

Przynależność do zbioru jest też przydatna jako filtr: sprawdź, czy wartość należy do zbioru w czasie O(1):

let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]
challenge icon

Wyzwanie

Łatwy

Wczytaj dwa wiersze danych wejściowych, każdy zawierający listę ciągów znaków oddzielonych przecinkami. Potraktuj je odpowiednio jako currentMembers i renewedMembers.

Wypisz trzy wiersze, każdy posortowany alfabetycznie i połączony za pomocą , (lub pusty, jeśli nie ma żadnych elementów):

  1. Lapsed: <...> > obecne minus odnowione
  2. New: <...> > odnowione minus obecne
  3. Stayed: <...> > część wspólna obu zbiorów

Dla danych wejściowych alice,bob,cara w wierszu 1 i bob,cara,dan w wierszu 2 wynik to:

Lapsed: alice
New: dan
Stayed: bob,cara

Spróbuj swoich sił

let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))

// TODO: wypisz Lapsed (current - renewed), New (renewed - current), Stayed (część wspólna)
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