ruby, какую структуру данных использовать - PullRequest
1 голос
/ 06 ноября 2011

Я работаю с выражениями 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 Ответ

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

Помимо очевидных деревьев, вы можете посмотреть на молнии:

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

Кто-то недавно внедрил zip-форму для Clojure, если вы хотите посмотреть пример:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...