Поиск…


Объявление наборов

Наборы представляют собой неупорядоченные коллекции уникальных значений. Уникальные значения должны быть одного типа.

var colors = Set<String>()

Вы можете объявить набор со значениями, используя синтаксис литерала массива.

var favoriteColors: Set<String> = ["Red", "Blue", "Green", "Blue"]
// {"Blue", "Green", "Red"}

Изменение значений в наборе

var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}  

Вы можете использовать метод insert(_:) для добавления нового элемента в набор.

favoriteColors.insert("Orange")
//favoriteColors = {"Red", "Green", "Orange", "Blue"}

Вы можете использовать метод remove(_:) для удаления элемента из набора. Он возвращает необязательное содержащее значение, которое было удалено, или значение nil, если значение не было в наборе.

let removedColor = favoriteColors.remove("Red")
//favoriteColors = {"Green", "Orange", "Blue"}
// removedColor = Optional("Red")

let anotherRemovedColor = favoriteColors.remove("Black")
// anotherRemovedColor = nil

Проверка того, содержит ли набор значение

var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}

Вы можете использовать метод contains(_:) чтобы проверить, содержит ли набор значение. Он вернет true, если набор содержит это значение.

if favoriteColors.contains("Blue") {
    print("Who doesn't like blue!")
}
// Prints "Who doesn't like blue!"

Выполнение операций над наборами

Общие значения из обоих наборов:

Вы можете использовать метод intersect(_:) для создания нового набора, содержащего все значения, общие для обоих наборов.

let favoriteColors: Set = ["Red", "Blue", "Green"]
let newColors: Set = ["Purple", "Orange", "Green"]

let intersect = favoriteColors.intersect(newColors) // a AND b
// intersect = {"Green"}

Все значения из каждого набора:

Вы можете использовать метод union(_:) для создания нового набора, содержащего все уникальные значения из каждого набора.

let union = favoriteColors.union(newColors) // a OR b
// union = {"Red", "Purple", "Green", "Orange", "Blue"}

Обратите внимание, как значение «Зеленый» появляется только один раз в новом наборе.

Значения, которые не существуют в обоих наборах:

Вы можете использовать метод exclusiveOr(_:) для создания нового набора, содержащего уникальные значения, но не оба набора.

let exclusiveOr = favoriteColors.exclusiveOr(newColors) // a XOR b
// exclusiveOr = {"Red", "Purple", "Orange", "Blue"}

Обратите внимание, как значение «Зеленый» не отображается в новом наборе, так как оно находилось в обоих наборах.

Значения, которые не входят в набор:

Вы можете использовать метод subtract(_:) для создания нового набора, содержащего значения, которые не находятся в определенном наборе.

let subtract = favoriteColors.subtract(newColors) // a - (a AND b)
// subtract = {"Blue", "Red"}

Обратите внимание, как значение «Зеленый» не отображается в новом наборе, так как оно также находилось во втором наборе.

Добавление значений моего собственного типа в Set

Чтобы определить Set вашего собственного типа, вам необходимо соответствовать типу Hashable

struct Starship: Hashable {
    let name: String
    var hashValue: Int { return name.hashValue }
}

func ==(left:Starship, right: Starship) -> Bool {
    return left.name == right.name
}

Теперь вы можете создать Set Starship(s)

let ships : Set<Starship> = [Starship(name:"Enterprise D"), Starship(name:"Voyager"), Starship(name:"Defiant") ]

CountedSet

3.0

Swift 3 представляет класс CountedSet (это Swift-версия класса NSCountedSet Objective-C).

CountedSet, как указано в названии, отслеживает, сколько раз присутствует значение.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow