是否有可能在Ruby 1.9中获得散列键的后继者和前导者?

时间:2011-11-27 15:20:48

标签: ruby ruby-1.9

我想知道如果没有迭代整个哈希值,这样的事情是否可行:

collection = { red: 1000, green: 120, "yellow" => 1, blue: 999 }

这样的事情:

collection.next_key(:red)    #Should return :green
collection.prev_key(:blue)   #Should return "yellow"

编辑:: 我希望以某种方式访问​​内部Ruby Hash数据结构的foreback成员:

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
};

Source

1 个答案:

答案 0 :(得分:2)

我认为它会起作用

class Hash
  def next_key(key)
    self.keys[self.keys.find_index(key) + 1]
  end
  def prev_key(key)
    self.keys[self.keys.find_index(key) - 1]
  end
end

但请记住,Hash是{{1}},所以项目的顺序可能与您编写的顺序不同。