2010-12-04 4 views
5

Есть ли реализация коллекции мешков (коллекция, подобная набору, в которой указано количество раз, когда объект вставлен)?Есть ли реализация сумки в Ruby?

+0

Я ищу что-то, что по возможности стандартно. Я бы предпочел, чтобы основная библиотека была драгоценным камнем и драгоценным камнем для кодирования, который даже не является драгоценным камнем. –

ответ

7

Обязательно! Он также называется multiset. Вот nice ruby implementation.

+0

В документации говорится о запуске скрипта как пользователя root. Есть ли в нем пакет ubuntu? –

+0

не то, что я знаю ... похоже, что вам нужно будет получить источник с этой стороны и построить его на своем конце. –

+1

Является ли это настолько старым, что он заранее даёт рубигемы? –

6

Довольно просто создать самостоятельно, не так ли?

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

Вероятно, не так быстро, как один реализован в C. –

+1

@AndrewGrimm Вероятно, не заметно медленнее, учитывая, что это очень легкая прокладка поверх Hash, которая реализована на C. – Phrogz