仍然通过编程集体智能和使用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}
Run Code Online (Sandbox Code Playgroud)
我想删除那些也在地图中的键(绑定到" mymovies ")的项目:
{"Snakes on a Plane" 4.5, "You, Me and Dupree" 1.0, "Superman Returns" 4.0}
Run Code Online (Sandbox Code Playgroud)
这样我就得到了地图:
{"Lady in the Water" 2.8325499182641614, "The Night Listener" 3.3477895267131017,
"Just My Luck" 2.5309807037655645}
Run Code Online (Sandbox Code Playgroud)
我设法完成的代码如下所示:
(apply merge (map #(hash-map (first %) (second %))
(remove #(contains? mymovies (first %))
recs)))
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很难看.似乎不应该从我从"删除"返回的值创建一个地图.有更清洁的方法吗?
更新:Joost的回答引发了另一个想法.如果我将两张地图的按键分成几组,我可以使用这样的select-keys:
(select-keys recs (difference (set (keys recs))
(set (keys mymovies))))
Run Code Online (Sandbox Code Playgroud)
Joost,谢谢你让我选择了键.我以前不知道那个功能.现在用这个新发现的知识重写其他几个部分!