Книга: Программирование на языке Ruby

9.1.1. Простые операции над множествами

9.1.1. Простые операции над множествами

Для объединения множеств служит метод union (синонимы | и +):

x = Set[1,2,3]
y = Set[3,4,5]
а = x.union(y) # Set[1,2,3,4,5]
b = x | y      # То же самое.
с = x + y      # То же самое.

Пересечение множеств вычисляется методом intersection (синоним &):

x = Set[1,2,3]
y = Set[3,4,5]
а = x.intersection(y) # Set[3]
b = x & y # То же самое.

Унарный минус обозначает разность множеств; мы обсуждали эту операцию в разделе 8.1.9.

diff = Set[1,2,3] - Set[3,4,5] # Set[1,2]

Принадлежность элемента множеству проверяют методы member? или include?, как для массивов. Напомним, что порядок операндов противоположен принятому в математике.

Set[1,2,3].include?(2) # true
Set[1,2,3].include?(4) # false
Set[1,2,3].member?(4)  # false

Чтобы проверить, является ли множество пустым, мы вызываем метод empty?, как и в случае с массивами. Метод clear очищать множество, то есть удаляет из него все элементы.

s = Set[1,2,3,4,5,6]
s.empty? # false
s.clear
s.empty? # true

Можно проверить, является ли одно множество подмножеством, собственным подмножеством или надмножеством другого.

x = Set[3,4,5]
y = Set[3,4]
x.subset?(y)        # false
y.subset?(x)        # true
y.proper_subset?(x) # true
x.subset?(x)        # true
x.proper_subset?(x) # false
x.superset?(y)      # true

Метод add (синоним <<) добавляет в множество один элемент и обычно возвращает его в качестве значения. Метод add? возвращает nil, если такой элемент уже присутствовал в множестве. Метод merge полезен, если надо добавить сразу несколько элементов. Все они, конечно, могут изменить состояние вызывающего объекта. Метод replace работает так же, как в случае со строкой или массивом.

Наконец, два множества можно сравнить на равенство интуитивно очевидным способом:

Set[3,4,5] == Set[5,4,3] # true

Оглавление книги


Генерация: 1.180. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз