2015-09-13 6 views
0

Я пытаюсь обновить вложенный хэш-файл с помощью функции update-in. Но я хочу обновить значение двух ключей, используя разные функции. Для Exemple:Clojure update-in по двум клавишам и двум функциям

У меня есть этот хэш:

{:1 {:value 0, :active false}, :2 {:value 0, :active false} 

И я хочу обновить ключ: 1 до:

{:1 {:value 2, :active true}, :2 {:value 0, :active false} 

Существует несколько способов сделать это?

Заранее спасибо

Update Может быть, я просто не могу использовать assoc: (assoc my-map :1 {:value 2, :active true})

+0

': 1' и': 2 'являются странными ключевыми словами, почему не только цифры' 1' и '2' в качестве ключей? – noisesmith

ответ

2

Вы можете иметь более одного К/пара с доц:

user=> (def m {:1 {:value 0, :active false}, :2 {:value 0, :active false}}) 
#'user/m 
user=> (update-in m [:1] assoc :value 1 :active true) 
{:1 {:value 1, :active true}, :2 {:value 0, :active false}} 
+0

Ницца. Он работал хорошо. – elf

1

Есть также assoc-in, который работает как assoc. Единственное отличие состоит в том, что вы предоставляете вектор ключей вместо одного ключа. Так что, может быть, вы можете направить свою карту через некоторые assoc-in.

Или использовать функцию update (добавлено в версии 1.7):

(update {:1 {:value 0, :active false}, :2 {:value 0, :active false} 
    :1 (fn [{:keys [value active]] 
      (magic value active))) 
+0

Спасибо человек. Этот способ тоже хорошо работал. – elf

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