对于LRU-Cache,LinkedListHashMap
是一个非常有用的结构。
在Ruby 1.9中,Hashes现在有
Ruby 1.9 internal hash entry struct
struct st_table_entry {
unsigned int hash;
st_data_t key;
st_data_t record;
st_table_entry *next;
st_table_entry *fore, *back; // new in Ruby 1.9
};
https://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/
我如何使用它来设置next
&条目上的back
属性?这将使访问和插入双向链表变得更加简单!
答案 0 :(得分:1)
我认为我们删除密钥然后读取它的唯一方法是
hash.delete(:some_key)
hash[:some_key] = some_value
然后:some_key
将转移到hash
答案 1 :(得分:1)
Ruby 1.9 Hash实现没有next或back方法。大多数情况下,如果您需要这样的功能,Hash将转换为元组,键或值的数组。但是由于Hash是enumerable,你可以在下面使用下一个。
h = {one: 1, two: 2, three: 3}
enum = h.to_enum
enum.next
enum.next
p enum.next # [:three, 3]
p enum.next # error `next': iteration reached an end (StopIteration)
enum = h.to_enum.cycle
enum.next
enum.next
enum.next
p enum.next # [:one, 1]
enum.rewind
p enum.next # [:one, 1]