Eu quero criar métodos diferentes para uma classe chamada Multiset .
Eu tenho todos os métodos necessários, mas não tenho certeza de como escrever métodos de interseção, união e subconjunto.
Para interseção e união, meu código começa assim:
def intersect(var)
x = Multiset.new
end
Aqui está um exemplo:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
então a interseção de X
e Y
é [1, 2]
.
ruby
union
intersection
subset
user487743
fonte
fonte
Respostas:
Utilizando o fato de que você pode definir operações em matrizes executando
&
(interseção),-
(diferença) e|
(união).Obviamente, não implementei o MultiSet para especificar, mas isso deve ajudá-lo a começar:
fonte
set
como nome variável de uma matriz simples; (2) Replicando tudo o queArray
já faz. Se o OP quiser adicionar funcionalidade àArray
classe com alguns métodos adicionais, você deve simplesmente fazer:class MultiSet < Array def inclusion?(other) Set.new(self).subset?(Set.new(other)) end end
Eu assumo
X
eY
são matrizes? Nesse caso, existe uma maneira muito simples de fazer isso:Fonte
fonte
Multiset < Array
.(x & y) | (y & z) | (x & z)
&=
,|=
e-=
se você também quer imediatamente armazenar o valor como eu fiz! :)Se
Multiset
estende daArray
classeUNIÃO
DIFERENÇA
INTERSEÇÃO
Para obter mais informações sobre os novos métodos no Ruby 2.6, você pode conferir esta postagem no blog sobre seus novos recursos.
fonte