Программирование на языке Ruby
Шрифт:
8.1.9. Массивы как математические множества
В большинстве языков множества напрямую не реализованы (Pascal составляет исключение). Но массивы в Ruby обладают некоторыми свойствами, которые позволяют использовать их как множества. В данном разделе мы рассмотрим эти свойства и добавим свои собственные.
В последних версиях Ruby стандартная библиотека содержит класс
Массив нельзя назвать идеальным средством для представления
Над множествами производятся две основные операции: объединение и пересечение. Для этого применяются операторы
Для объединения множеств можно использовать и оператор конкатенации (
Метод
Для «аккумулирования» множеств можно применять оператор
Для массивов не определена операция ИСКЛЮЧАЮЩЕЕ ИЛИ, но мы можем без труда реализовать ее. В терминах теории множеств она соответствует выборке тех элементов, которые входят в объединение двух множеств, но не входят в их пересечение.
Чтобы проверить, входит ли некий элемент в множество, пользуйтесь методом
Конечно, это некоторое отступление от канонов математики, где для обозначения принадлежности множеству применяется символ, похожий на греческую букву эпсилон. Отступление в том смысле, что множество находится слева, а не справа от оператора, то есть мы спрашиваем не «принадлежит ли данный элемент множеству», а «содержит ли множество данный элемент».
Многим это безразлично. Но привыкшие к языку Pascal или Python (или впитавшие математический формализм с молоком матери) хотели бы, чтобы было по-другому. Такую возможность мы реализуем в следующем фрагменте:
Лично я отправил запрос на изменение Ruby (RCR 241) с предложением ввести в язык оператор
У этой идеи есть свои достоинства (к тому же
Теперь обратимся к подмножествам и надмножествам. Как определить, является ли данное множество подмножеством или надмножеством другого? Встроенных методов для этого нет, но мы можем поступить следующим образом:
Обратите внимание: мы выбрали «естественный» порядок, то есть задаем вопрос
Для распознавания пустого множества достаточно проверить, пуст ли массив. Это делает метод
Рано или поздно
Дадли
Любовные романы:
исторические любовные романы
рейтинг книги
Рассказы. Стихотворения
Проза:
рассказ
рейтинг книги
Ваше Сиятельство 2
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
рейтинг книги
Охотник за головами
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Егерь. Столичный гамбит
4. Зверолов
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Винодел
2. Карен Вейл
Детективы:
триллеры
маньяки
рейтинг книги
Один триллион долларов
Детективы:
триллеры
рейтинг книги
Россия и Китай. Конфликты и сотрудничество
Военные тайны XX века
Научно-образовательная:
история
рейтинг книги
Я до сих пор не царь. Книга XXVII
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
УЗНИК РОССИИ
Проза:
историческая проза
рейтинг книги
Ночь с Ангелом
Проза:
современная проза
рейтинг книги
Выход где вход
Проза:
современная проза
рейтинг книги