Как я могу получить пересечение, объединение и подмножество массивов в Ruby?
Я хочу создать различные методы для класса Multiset.
У меня есть все необходимые методы, но я не уверен, как писать методы пересечения, объединения и подмножества.
Для пересечения и объединения мой код начинается следующим образом:
def intersect(var)
x = Multiset.new
end
Вот пример:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
то пересечение X
и Y
равно [1, 2]
.
Ответы
Ответ 1
Используя тот факт, что вы можете выполнять операции над массивами, выполняя &
(пересечение), -
(разность) и |
(объединение).
Очевидно, что я не реализовал спецификацию MultiSet, но это должно начать:
class MultiSet
attr_accessor :set
def initialize(set)
@set = set
end
# intersection
def &(other)
@set & other.set
end
# difference
def -(other)
@set - other.set
end
# union
def |(other)
@set | other.set
end
end
x = MultiSet.new([1,1,2,2,3,4,5,6])
y = MultiSet.new([1,3,5,6])
p x - y # [2,2,4]
p x & y # [1,3,5,6]
p x | y # [1,2,3,4,5,6]
Ответ 2
Я предполагаю, что X
и Y
являются массивами? Если это так, есть очень простой способ сделать это:
x = [1, 1, 2, 4]
y = [1, 2, 2, 2]
# intersection
x & y # => [1, 2]
# union
x | y # => [1, 2, 4]
# difference
x - y # => [4]
Источник