Пусть говорят, у меня есть массив в следующем формате:Получить конкретную информацию из многомерного массива
arr = [{
"id":"11",
"children":[
{ "id":"9"},
{ "id":"5", "children":[ {"id":"4"} ] }
]
},
{
"id":"10",
"children":[{ "id":"7"} ]
}
]
А теперь я хотел бы получить все идентификаторы, которые очевидны в этом массиве:
11,9,5,4,10,7
для этого я хотел бы использовать рекурсивный код, подобный этому:
ids = []
def find_ids arr
arr.each do |entry|
ids << entry["id"] if entry["id"]
find_ids(entry["children"]) if entry["children"]
end
end
Что бы вы сделали, чтобы получить идентификаторы?
Возможно, вы знаете очень короткую версию?
Благодаря
Джон, я доверяю редактировать я сделал все в порядке с вами. Я переформатировал входной массив, чтобы выявить его структуру, а также избежать необходимости прокрутки читателей по горизонтали, чтобы увидеть его. Я также привязал к нему переменную ('arr'), чтобы читатели могли ссылаться на переменную, не определяя ее. Было бы полезно (когда бы вы приводили пример) показать желаемый результат в качестве объекта Ruby. Здесь вы можете запросить '[11, 9, 5, 4, 10, 7]'. –
Сделайте это '[" 11 "," 9 "," 5 "," 4 "," 10 "," 7 "]', если вы не хотите, чтобы строки были преобразованы в целые числа. –
Я не читал ваш вопрос, прежде чем публиковать свой ответ, который почти совпадает с тем, что вы предлагаете, за исключением того, что я разрешал пары ключ-значение, где ключ не ': id', а значение не является массивом. Заметьте '{" id ": 1} # => {: id => 1}', то есть кавычки являются избыточными (и нужны только тогда, когда строка содержит пробел ('{" ab ": 1} # = > {: "ab" => 1} '). В результате' {"id": 1} ["id"] # => nil'. Вам нужно '{id: 1} [: id] # = > 1'. –