2013-12-10 6 views
0

Как я могу получить все ключи в Hash в Ruby, а также вложенные. Дубликаты следует игнорировать, например.Как получить все (вложенные) ключи хэша?

{ a: 3, b: { b: 2, b: { c: 5 } } }.soberize 
=> [:a, :b, :c] 

Что было бы самой быстрой реализацией?

+3

Дайте нам пример кода, который вы написали, чье вы не удовлетворены. –

ответ

2

Простое рекурсивное решение:

def recursive_keys(data) 
    data.keys + data.values.map{|value| recursive_keys(value) if value.is_a?(Hash) } 
end 

def all_keys(data) 
    recursive_keys(data).flatten.compact.uniq 
end 

Использование:

all_keys({ a: 3, b: { b: 2, b: { c: 5 } } }) 
=> [:a, :b, :c] 
1

насчет рекурсивного метода?

def nested_keys(hash, array) 
    if hash.is_a?(Hash) 
    array |= hash.keys 
    hash.keys.map do |key| 
     array = nested_keys(hash[key], array) 
    end 
    end 
    array 
end 
Смежные вопросы