2011-07-05 3 views
0

У меня есть следующий YAML:Анализ YAML в Ruby: как получить массив определенного типа элементов?

- name: List of monkeys 
- author: Nicolas Raoul 
- version: 1 
- monkey: Chee-Chee 
- monkey: Curious George 
- monkey: Mojo 

Как получить массив обезьян в Ruby? Количество параметров метаданных (имя, автор, ...) является переменной.

Это возвращает что-то вроде [Chee-Chee, Curious George, Mojo]

Примечания: Я не хочу, чтобы создать monkeys узел, содержащий все обезьяна, как подпункты, потому что есть много обезьян, и я хочу, чтобы сохранить файл на самом деле просто.

ответ

1

Ну, ваш YAML выглядит немного сумасшедшим: каждая из этих строк - это hash, содержащий один элемент. Тем не менее, если вы застряли с ним, что-то вроде этого, что Вы получите массив имен обезьян:

require 'yaml' 

data = YAML.load(DATA.read) 
p data.map { |row| row['monkey'] }.compact 

__END__ 
- name: List of monkeys 
- author: Nicolas Raoul 
- version: 1 
- monkey: Chee-Chee 
- monkey: Curious George 
- monkey: Mojo 

Очевидно, что вы могли бы загрузить YAML из любой точки мира, он не должен быть в вашем блоке DATA.

+0

Я новичок в YAML, поэтому любое предложение приветствуется :-) Список будет отредактирован клиентом, поэтому он должен быть мертвым простым. Примечание: у каждой обезьяны есть еще несколько атрибутов, которые я не писал здесь для краткости. –

+0

Ваш ответ верен для вопроса, как я его просил. Мое предположение о том, что я могу игнорировать атрибуты обезьян для краткости, неверно, поэтому я создал новый вопрос: http://stackoverflow.com/questions/6578370 –

Смежные вопросы