ruby使用哪种数据结构

时间:2011-11-05 23:28:58

标签: ruby data-structures

我正在使用Ripper sexp表达式,它看起来像这样:

[:program,
 [[:class,
   [:const_ref, [:@const, "A", [1, 6]]],
   nil,
   [:bodystmt,
    [[:class,
      [:const_ref, [:@const, "B", [1, 15]]],
      nil,
      [:bodystmt,
       [[:def,
         [:@ident, "test", [1, 22]],
         [:params, nil, nil, nil, nil, nil],
         [:bodystmt, [[:void_stmt]], nil, nil, nil]]],
       nil,
       nil,
       nil]]],
    nil,
    nil,
    nil]]]]

我正在使用数组作为获取sexp表达式元素的路径。例如

path = [1,0,1,1]   =>   sexp[1][0][1][1]

会得到我

[:@const, "A", [1, 6]]

通过这条路径,我可以获得下一个,前一个,父元素等等。

但我想知道是否有更适合这类任务的数据结构?

1 个答案:

答案 0 :(得分:2)

除了明显的树木,您可能还想看拉链:

http://en.wikipedia.org/wiki/Zipper_(data_structure)

最近有人为Clojure实现了form-zip,如果你想看一个例子:

https://github.com/GeorgeJahad/form-zip