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

3.0

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow