Все еще работаю через Программирование Коллективного Разума и использование Clojure для написания кода.У меня это работает, но некоторые части действительно ужасны, поэтому я подумал, что я попрошу некоторых экспертов, которые здесь присутствуют, помочь разобраться.
Предположим, у меня есть карта, которая выглядит следующим образом (связана с " recs "):
{"Superman Returns" 3.902419556891574, "Lady in the Water" 2.8325499182641614,
"Snakes on a Plane" 3.7059737842895792, "The Night Listener" 3.3477895267131017,
"You, Me and Dupree" 2.651006036204627, "Just My Luck" 2.5309807037655645}
, и я хочу удалить эти элементы с ключами, которыетакже на карте (привязанной к " mymovies "):
{"Snakes on a Plane" 4.5, "You, Me and Dupree" 1.0, "Superman Returns" 4.0}
, чтобы я получил карту:
{"Lady in the Water" 2.8325499182641614, "The Night Listener" 3.3477895267131017,
"Just My Luck" 2.5309807037655645}
код, который мне удалось получитьсделать это выглядит так:
(apply merge (map #(hash-map (first %) (second %))
(remove #(contains? mymovies (first %))
recs)))
Это кажется мне довольно уродливым.Не похоже, что нужно создавать карту из значения, которое я получаю из «удалить».Есть ли более чистый способ сделать это?
ОБНОВЛЕНИЕ: ответ Джоста ниже вызвал другую идею.Если я превращу ключи двух карт в наборы, я могу использовать клавиши выбора следующим образом:
(select-keys recs (difference (set (keys recs))
(set (keys mymovies))))
Joost, спасибо, что включили меня в клавиши выбора .Я не знал об этой функции раньше.Теперь, чтобы пойти переписать несколько других разделов с этим новым найденным знанием!