Quiero crear diferentes métodos para una clase llamada Multiset .
Tengo todos los métodos requeridos, pero no estoy seguro de cómo escribir los métodos de intersección, unión y subconjunto.
Para intersección y unión, mi código comienza así:
def intersect(var)
x = Multiset.new
end
Aquí hay un ejemplo:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
entonces la intersección de X
y Y
es [1, 2]
.
ruby
union
intersection
subset
usuario487743
fuente
fuente
Respuestas:
Aprovechando el hecho de que puede establecer operaciones en matrices haciendo
&
(intersección),-
(diferencia) y|
(unión).Obviamente no implementé el MultiSet para especificar, pero esto debería ayudarlo a comenzar:
fuente
set
como nombre variable de una matriz simple; (2) Replicando todo lo queArray
ya hace. Si el OP quiere agregar funcionalidad a laArray
clase con algunos métodos adicionales, simplemente debe hacer:class MultiSet < Array def inclusion?(other) Set.new(self).subset?(Set.new(other)) end end
Supongo
X
yY
son matrices? Si es así, hay una manera muy simple de hacer esto:Fuente
fuente
Multiset < Array
.(x & y) | (y & z) | (x & z)
&=
,|=
y-=
si también desea almacenar el valor de inmediato como lo hice! :)Si se
Multiset
extiende desde laArray
claseUNIÓN
DIFERENCIA
INTERSECCIÓN
Para obtener más información sobre los nuevos métodos en Ruby 2.6, puede consultar esta publicación de blog sobre sus nuevas características
fuente