链接列表哈希Ruby

时间:2015-06-29 04:13:21

标签: ruby hash

对于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属性?这将使访问和插入双向链表变得更加简单!

2 个答案:

答案 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]