Хэш дерево с одной веткой

Есть ли какой-нибудь удобный способ конвертировать массив

[a,b,c]

к структуре хэш-дерева, но только с одной веткой, например:

{node: {a: {node: {b: {node: :c}}}}}

2 ответа

Решение

Вы можете использовать reduce чтобы получить результат:

l = [:a, :b, :c]
t = l.reverse.reduce{|h,v|{v=>{node:h}}}  # {:a=>{:node=>{:b=>{:node=>:c}}}}

Что-то подобное подойдет:

 a=[:a,:b,:c]
 l=lambda{|ar| if ar.empty? then 
        {}
    else 
        ar.length==1 ? {:node=>ar[0]} : {:node=> {ar.shift => (l.call ar)}}
    end
  }
 puts l.call a

Не уверен, что есть более простой способ.

UPD: упс, не заметил, что это как-то связано с ActiveSupport. В любом случае преобразование этого хэша в структуру, которая вам нужна, не должно быть трудным.

Другие вопросы по тегам