2010-12-04 16 views
5

Gibt es eine Implementierung der Taschenkollektion (eine Sammlung wie ein Satz, der angibt, wie oft ein Objekt eingefügt wird)?Gibt es eine Taschenimplementierung in Ruby?

+0

Ich bin auf der Suche nach etwas, das so standard wie möglich ist. Ich würde eine Kernbibliothek zu einem Edelstein und einem Edelstein vorziehen, um zu programmieren, der nicht einmal ein Edelstein ist. –

Antwort

7

Sicher! Es wird auch multiset genannt. Hier ist ein nice ruby implementation.

+0

Die Dokumentation spricht davon, ein Skript als root auszuführen. Gibt es ein Ubuntu-Paket, das es enthält? –

+0

Nicht dass ich mir dessen bewusst bin ... sieht so aus, als müsstest du die Quelle von dieser Seite holen und sie an deinem Ende aufbauen. –

+1

Ist das so alt, dass es Rubine vorfindet? –

6

Ziemlich einfach auf eigene Faust zu erstellen, oder?

class Bag 
    def initialize 
    @h = Hash.new{ 0 } 
    end 
    def <<(o) 
    @h[o] += 1 
    end 
    def [](o) 
    @h[o] 
    end 
end 

bag = Bag.new 
bag << :a 
bag << :b 
bag << :a 
p bag[:a], bag[:b], bag[:c], bag 
#=> 2 
#=> 1 
#=> 0 
#=> #<Bag:0x100138890 @h={:b=>1, :a=>2}> 
+0

Wahrscheinlich nicht so schnell wie eine in C implementiert. –

+1

@AndrewGrimm Wahrscheinlich nicht merklich langsamer, da es sich um ein sehr leichtes Shim über Hash handelt, das in C implementiert ist. – Phrogz

Verwandte Themen