Возможно ли получить преемника и предшественника хеш-ключа в Ruby 1.9? - PullRequest
5 голосов
/ 27 ноября 2011

Интересно, возможно ли что-то подобное без перебора всего хеша:

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

Примерно так:

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

EDIT :: Я надеялся получить доступ к элементу fore и back внутренней структуры данных Ruby Hash:

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

( Источник )

1 Ответ

2 голосов
/ 27 ноября 2011

Я думаю, что это будет работать

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, поэтому порядок элементов может отличаться от того, который вы пишете.

...