2016-10-04 45 views
-1

我想在一個散列內存儲一堆元素,但該鍵必須是當時的時間戳。我應該如何去做這樣的事情?這是在純粹的Ruby not Rails中。如何在Ruby中用鍵值存儲歷史記錄(通過時間戳)?

+2

'store || = {}; store [Time.zone.now_to_i] ='some info'' –

+0

'Time#zone'返回一個'String'([link](http://ruby-doc.org/core-2.3.1/Time。 html#method-i-zone)),所以你不能將'now'應用到它。你可以做一個'Time.now.to_i',但這隻會提供1秒的粒度。 OP需要指定他需要的時間戳的粒度。 – user1934428

+1

然後使用'Time.now.to_f'獲得粒度 – Tiago

回答

2

這是做到這一點的一種方法:

class Store 
    def initialize() 
     @hash = {} 
    end 

    def add(data) 
     @hash[Time.now.to_f] = data 
    end 

    def to_s 
     @hash.to_s 
    end 

end 


new_store = Store.new 

new_store.add("foo"); 
new_store.add("bar"); 

puts new_store.to_s 

輸出:

{1475565786.995899=>"foo", 1475565786.995907=>"bar"} 
1
hash = (Class.new(Hash) do 
    def << value 
    tap { |this| this[Time.now.strftime("%Y-%m-%d %H:%M:%S.%6N")] = value } 
    end 
end).new 
hash << :foo 
sleep 1 
hash << :bar << :baz 
hash 
#⇒ { 
# "2016-10-04 09:44:08.816475" => :foo, 
# "2016-10-04 09:44:09.824107" => :bar, 
# "2016-10-04 09:44:09.824125" => :baz 
# } 

NB:我downvoted的投入不遺餘力的問題,而是回答了這個問題,因爲該解決方案可能對未來的訪問者有所幫助。

+0

非常好的解決方案。只是一個簡單的問題:「自我[Time.now] =價值」比「self.tap」更糟? –

+0

@AndreyDeineko見'hash <<:bar <<:baz':連鎖'<<'調用這個方法是返回'self'。 – mudasobwa

+0

絕對,沒有想過這樣 –

相關問題