Ich möchte verschiedene Methoden für eine Klasse namens Multiset erstellen .
Ich habe alle erforderlichen Methoden, bin mir aber nicht sicher, wie ich Schnitt-, Vereinigungs- und Teilmengenmethoden schreiben soll.
Für Schnittmenge und Vereinigung beginnt mein Code wie folgt:
def intersect(var)
x = Multiset.new
end
Hier ist ein Beispiel:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
dann wird der Schnittpunkt von X
und Y
ist [1, 2]
.
ruby
union
intersection
subset
user487743
quelle
quelle
Antworten:
Nutzen Sie die Tatsache, dass Sie Set-Operationen für Arrays ausführen können, indem Sie
&
(Schnittmenge),-
(Differenz) und|
(Vereinigung) ausführen .Natürlich habe ich das MultiSet nicht gemäß Spezifikation implementiert, aber dies sollte Ihnen den Einstieg erleichtern:
quelle
set
als Variablenname eines einfachen Arrays; (2) Replizieren von allem, wasArray
bereits funktioniert. Wenn das OP derArray
Klasse mit einigen zusätzlichen Methoden Funktionen hinzufügen möchte , sollten Sie einfachclass MultiSet < Array def inclusion?(other) Set.new(self).subset?(Set.new(other)) end end
Ich nehme an
X
undY
sind Arrays? Wenn ja, gibt es einen sehr einfachen Weg, dies zu tun:Quelle
quelle
Multiset < Array
.(x & y) | (y & z) | (x & z)
&=
gibt|=
, und-=
wenn Sie auch sofort den Wert speichern möchten, wie ich es getan habe! :)Wenn
Multiset
erstreckt sich von derArray
KlasseUNION
UNTERSCHIED
ÜBERSCHNEIDUNG
Weitere Informationen zu den neuen Methoden in Ruby 2.6 finden Sie in diesem Blogbeitrag zu den neuen Funktionen
quelle