Size: a a a

Clojure — русскоговорящее сообщество

2021 February 02

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
(apply dissoc m ks)
источник

AS

Anatoly Smolyaninov in Clojure — русскоговорящее сообщество
Igor Levdansky
(apply dissoc m ks)
👍
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
всем спасибо,
(juxt (partial apply dissoc)
        select-keys)

выглядит более-менее
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
но обидно, что два прохода всё равно будет
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
можно через reduce

(defn split-map [m ks]
 (reduce
  (fn [[m1 m2] k]
    [(assoc m1 k (get m k))
     (dissoc m2 k)])
  [{} m]
  ks))
источник

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
Ну, ключей в мапке, наверное не так много будет, чтобы об этом беспокоиться... Хотя, конечно, от задачи зависит
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Вообще, конечно, интересно, что это за задача такая, что нужно расщепить мапу на две именно таким образом
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Sergey Trofimov
Вообще, конечно, интересно, что это за задача такая, что нужно расщепить мапу на две именно таким образом
вообще неоднократно уже сталкиваюсь с подобной проблемой: например, есть какой-то условно-плоский кусок данных, из которых что-то надо выдать наружу, а что-то ни в коем разе нельзя, но использовать при этом надо (типа креденшлов, например).
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
как креденшлы оказались в одной структуре с полезными данными? да например те же внутренности clj-http посмотри
источник

ap

andei papkov in Clojure — русскоговорящее сообщество
Случаем деструкцией такое сделать нельзя?
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
andei papkov
Случаем деструкцией такое сделать нельзя?
конечно можно, так и делаю, пока не приходится деструктурить по десятку параметров
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
вообще неоднократно уже сталкиваюсь с подобной проблемой: например, есть какой-то условно-плоский кусок данных, из которых что-то надо выдать наружу, а что-то ни в коем разе нельзя, но использовать при этом надо (типа креденшлов, например).
у нас сделано так: секретные данные врапятся в особый объект, у которого toString и протокол печати выводить <secret>
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
вообще неоднократно уже сталкиваюсь с подобной проблемой: например, есть какой-то условно-плоский кусок данных, из которых что-то надо выдать наружу, а что-то ни в коем разе нельзя, но использовать при этом надо (типа креденшлов, например).
ну, это select-keys для выдачи наружу и использовать весь набор данных внутренне
зачем отделять данные, не вошедшие в select-keys?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
и обвязка через walk, которая пробегает по дереву и делает unmask для секретов перед передачей их куда-то. Если даже мапа уйдет в лог, секретов видно не будет
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Ivan Grishaev
у нас сделано так: секретные данные врапятся в особый объект, у которого toString и протокол печати выводить <secret>
они не обязательно секретные, они могут быть просто "лишние", но нужные до поры до времени
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
ну или просто есть структура, которую нужно разделить на две, потому что оно лежит уже в готовом виде, но смерженное
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
это решение почти в лоб, да, но очень уж напрягает делать всё не в один проход и конвертить туда-сюда
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
о, а ещё на core.unify такое наверное достаточно просто сделать, но оверхед
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
или через group-by
(defn split-map
 [m keys]
 (->> m
      (group-by #(if (contains? (set keys) (first %)) :true :false))
      ((juxt :true :false))
      (mapv #(into {} %))))
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
остановите меня!
источник