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