Множества


Множества (Set) представляют собой неупорядоченные коллекции уникальных элементов. В отличие от массивов в множествах элементы должны быть уникальными, мы не можем определить несколько элементов с одним и тем же значением.

Определение
Для определения множества у переменной или константы устанавливается тип Set<Element>, где Element - это тип данных:

1
var numbers: Set<Int> = [5, 6, 7, 8]
При определении можно опускать тип:

1
var numbers: Set = [5, 6, 7, 8]
Либо можно использовать функцию инициализатора Set<Element>:

1
var numbers = Set<Int>(arrayLiteral: 5, 6, 7, 8)
Создание пустого множества:

1
2
3
var numbers = Set<Int>()
// или
// var numbers: Set<Int> = []
Работа с множествами
Метод insert() позволяет добавить новый элемент в множество:

1
2
3
var numbers: Set<Int> = [5, 6, 7, 8]
numbers.insert(10);
print(numbers) // [5, 6, 7, 8, 10]
Также множества поддерживают ряд операций по удалению:

removeAtIndex(): удаляет элемент по определенному индексу

removeFirst(): удаляет первый элемент

remove(): удаляет какой-то определенный элемент по значению

removeAll(): удаляет все элементы

1
2
3
var numbers: Set<Int> = [5, 6, 7, 8]
numbers.remove(7);
print(numbers) // [5, 6, 8]
Еще один метод contains() позволяет проверить наличие в множестве элемента:

1
2
3
var numbers: Set<Int> = [5, 6, 7, 8]
var isPresent = numbers.contains(7); // true - элемент есть
isPresent = numbers.contains(34); // false - элемент отсутствует
Хотя множество представляет неупорядоченный набор, но с помощью метода sorted() мы можем отсортировать его:

1
2
var numbers: Set<Int> = [4, 7, 2, 6]
print(numbers.sorted()) // [2, 4, 6, 7]
Операции над множествами
Особую ценность среди операций представляют операции, предназначенные специально для множеств: объединение, пересечение, разность множеств.

Операции над множествами в Swift
intersection(): пересечение множеств, возвращает общие для обоих множеств элементы

symmetricDifference(): возвращает не общие (не пересекающиеся) для обоих множеств элементы (симметрическая разность)

union(): объединение двух множеств

subtract(): разница множеств, возвращает элементы первого множества, которые отсутствуют во втором

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a: Set = [1, 2, 3, 4, 5]
var b: Set = [4, 5, 6, 7, 8]

// объединение
a.union(b) // [1, 2, 3, 4, 5, 6, 7, 8]

// пересечение
a.intersection(b) // [4, 5]

// разность
a.subtract(b) // [1, 2, 3]

// симметрическая разность
a.symmetricDifference(b) // [1, 2, 3, 6, 7, 8]