2011-03-21 84 views
0

我必须在Ruby中操纵深度嵌套哈希(5或6级)。例如,我需要交换像这样的第三和第四个层次,从:在Ruby中操作哈希

a[b][c][d][e] = [] 

到:

a[b][d][c][e]= [] 

任何人都可以点我的算法,这将帮助我吗?我不是懒惰的,只是在时间限制下。

+0

我不明白。难道你不知道哪两个元素需要交换?此外,散列确实需要如此复杂吗? – 2011-03-21 14:54:04

+0

我知道我想交换哪些元素。我正在使用这个来构建一个与源散列不同的嵌套的XML文件结构。 – AKWF 2011-03-21 14:57:34

+1

@yock:深嵌套哈希是比我们想要的更常见的东西...通常是一个糟糕的设计的症状,确实:) – Romain 2011-03-21 14:58:42

回答

1

除非我疲惫不堪,你跑不掉的东西,像这样:

result = Hash.new 
a.each do |b, ab| 
    result[b] ||= Hash.new 
    ab.each do |c, abc| 
     abc.each do |d, abcd| 
      (result[b][d] ||= Hash.new)[c] = abcd 
     end 
    end 
end 
a = result 

现在,我并不是说这是工作出来的最有效的方式。

0

既然它揭示了你正在解析XML,我强烈建议你不要推出自己的解决方案。 REXML是在Ruby中解析XML的一个选项。

+0

我不解析它,我从数据创建它。 – AKWF 2011-03-21 15:25:03