У меня есть следующее дерево:Как лучше всего обновить это дерево?
{:start_date "2014-12-07"
:data {
:people [
{:id 1
:projects [{:id 1} {:id 2}]}
{:id 2
:projects [{:id 1} {:id 3}]}
]
}
}
Я хочу, чтобы обновить people
и projects
поддеревьев, добавив пару с :name
ключ-значение. Предполагая, что у меня есть эти карты для выполнения поиска:
(def people {1 "Susan" 2 "John")
(def projects {1 "Foo" 2 "Bar" 3 "Qux")
Как я могу обновить исходное дерево, так что я в конечном итоге со следующим?
{:start_date "2014-12-07"
:data {
:people [
{:id 1
:name "Susan"
:projects [{:id 1 :name "Foo"} {:id 2 :name "Bar"}]}
{:id 2
:name "John"
:projects [{:id 1 :name "Foo"} {:id 3 :name "Qux"}]}
]
}
}
Я пробовал несколько комбинаций assoc-in
, update-in
, get-in
и map
звонки, но не был в состоянии понять это.
спасибо. Помимо решения моей проблемы, это привлекло внимание 'letfn :) :) –
Я не понимаю, что проходит' (projects (: id%)) 'как значение для lambda' assoc'. Разве «проекты» не являются картой? Как его можно использовать как функцию в этом случае? –
О, я просто понял, что '(projects (: id%))' является сокращением для '(get projects (: id%))'. –