Swift Language
Zestawy
Szukaj…
Deklarowanie zestawów
Zestawy to nieuporządkowane kolekcje unikalnych wartości. Unikalne wartości muszą być tego samego typu.
var colors = Set<String>()
Możesz zadeklarować zestaw z wartościami, używając składni literału tablicowego.
var favoriteColors: Set<String> = ["Red", "Blue", "Green", "Blue"]
// {"Blue", "Green", "Red"}
Modyfikowanie wartości w zestawie
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
Możesz użyć metody insert(_:)
, aby dodać nowy element do zestawu.
favoriteColors.insert("Orange")
//favoriteColors = {"Red", "Green", "Orange", "Blue"}
Możesz użyć metody remove(_:)
, aby usunąć element ze zbioru. Zwraca opcjonalną zawierającą wartość, która została usunięta lub zero, jeśli wartość nie była w zestawie.
let removedColor = favoriteColors.remove("Red")
//favoriteColors = {"Green", "Orange", "Blue"}
// removedColor = Optional("Red")
let anotherRemovedColor = favoriteColors.remove("Black")
// anotherRemovedColor = nil
Sprawdzanie, czy zestaw zawiera wartość
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
Możesz użyć metody contains(_:)
, aby sprawdzić, czy zestaw zawiera wartość. Zwróci wartość true, jeśli zestaw zawiera tę wartość.
if favoriteColors.contains("Blue") {
print("Who doesn't like blue!")
}
// Prints "Who doesn't like blue!"
Wykonywanie operacji na zestawach
Wspólne wartości z obu zestawów:
Możesz użyć metody intersect(_:)
, aby utworzyć nowy zestaw zawierający wszystkie wartości wspólne dla obu zestawów.
let favoriteColors: Set = ["Red", "Blue", "Green"]
let newColors: Set = ["Purple", "Orange", "Green"]
let intersect = favoriteColors.intersect(newColors) // a AND b
// intersect = {"Green"}
Wszystkie wartości z każdego zestawu:
Możesz użyć metody union(_:)
, aby utworzyć nowy zestaw zawierający wszystkie unikalne wartości z każdego zestawu.
let union = favoriteColors.union(newColors) // a OR b
// union = {"Red", "Purple", "Green", "Orange", "Blue"}
Zwróć uwagę, jak wartość „Zielona” pojawia się tylko raz w nowym zestawie.
Wartości, które nie istnieją w obu zestawach:
Możesz użyć metody exclusiveOr(_:)
, aby utworzyć nowy zestaw zawierający unikalne wartości z jednego, ale nie z obu zestawów.
let exclusiveOr = favoriteColors.exclusiveOr(newColors) // a XOR b
// exclusiveOr = {"Red", "Purple", "Orange", "Blue"}
Zauważ, że wartość „Zielona” nie pojawia się w nowym zestawie, ponieważ była w obu zestawach.
Wartości, których nie ma w zestawie:
Możesz użyć metody subtract(_:)
, aby utworzyć nowy zestaw zawierający wartości, które nie znajdują się w określonym zestawie.
let subtract = favoriteColors.subtract(newColors) // a - (a AND b)
// subtract = {"Blue", "Red"}
Zwróć uwagę, że wartość „Zielona” nie pojawia się w nowym zestawie, ponieważ znajdowała się również w drugim zestawie.
Dodawanie wartości własnego typu do zbioru
Aby zdefiniować Set
własnego typu, musisz dostosować swój typ do Hashable
struct Starship: Hashable {
let name: String
var hashValue: Int { return name.hashValue }
}
func ==(left:Starship, right: Starship) -> Bool {
return left.name == right.name
}
Teraz możesz stworzyć Set
Starship(s)
let ships : Set<Starship> = [Starship(name:"Enterprise D"), Starship(name:"Voyager"), Starship(name:"Defiant") ]
CountedSet
Swift 3 wprowadza klasę CountedSet
(jest to wersja Swift klasy NSCountedSet
Objective-C).
CountedSet, jak sugeruje nazwa, śledzi, ile razy wartość jest obecna.
let countedSet = CountedSet()
countedSet.add(1)
countedSet.add(1)
countedSet.add(1)
countedSet.add(2)
countedSet.count(for: 1) // 3
countedSet.count(for: 2) // 1