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