Chcę utworzyć różne metody dla klasy o nazwie Multiset .
Mam wszystkie wymagane metody, ale nie jestem pewien, jak napisać metody przecięcia, sumy i podzbioru.
W przypadku przecięcia i unii mój kod zaczyna się tak:
def intersect(var)
x = Multiset.new
end
Oto przykład:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
następnie przecięcie X
i Y
jest [1, 2]
.
ruby
union
intersection
subset
user487743
źródło
źródło
Odpowiedzi:
Wykorzystując fakt, że możesz wykonywać operacje na zestawach na tablicach, wykonując
&
(przecięcie),-
(różnicę) i|
(sumę).Oczywiście nie zaimplementowałem MultiSetu zgodnie ze specyfikacją, ale to powinno zacząć:
źródło
set
jako nazwa zmiennej zwykłej tablicy; (2) Powielanie wszystkiego, coArray
już robi. Jeśli OP chce dodać funkcjonalność doArray
klasy za pomocą dodatkowych metod, powinieneś po prostu zrobić:class MultiSet < Array def inclusion?(other) Set.new(self).subset?(Set.new(other)) end end
Zakładam
X
iY
czy tablice są? Jeśli tak, możesz to zrobić w bardzo prosty sposób:Źródło
źródło
Multiset < Array
.(x & y) | (y & z) | (x & z)
&=
,|=
a-=
jeśli chcesz również natychmiast zapisać wartość, tak jak ja! :)Jeśli
Multiset
rozciąga się odArray
klasyUNIA
RÓŻNICA
SKRZYŻOWANIE
Aby uzyskać więcej informacji o nowych metodach w Rubim 2.6, możesz sprawdzić ten wpis na blogu o nowych funkcjach
źródło