(fn [data] (into {} (map (juxt :course :mark) data)))
上
(list {:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})
产生
{2 9, 5 8, 6 10}
的keyword
函数不接受数字作为论据,所以我不认为你可以得到相当是你所期待的。但是数字无论如何都是关键字。
错!正如其他人所表明的,Clojure接受数字字符串作为关键字。我们可以适应上述使用这样的:
(fn [data] (into {} (map (juxt (comp keyword str :course) :mark) data)))
上
(list {:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})
产生
{:2 9, :5 8, :6 10}
但是,正如我已经说过了,我认为这是不必要的风险。为什么不使用数字作为键?
而且使用数字(字符串)关键字:
的reader doc about symbols说
- 符号与非数字字符开头...
- 关键词都喜欢符号除外:...(进一步限制)
Neat solution._ – jforberg
'juxt'在这里是个好主意! (fn [data](into {}(map(juxt#(关键字(str(:course%))):mark)data))为了得到所需的输出结果,下面是解决方案以获得确切的请求输出: )' – leontalbot
@leontalbot我做得有点不同,Leon。我仍然感到惊讶的是数字字符串关键字被接受。无论如何,带关键字作为函数的juxt具有很强的表现力。如果你在玩高尔夫球代码:还是一个比我更长的角色,嘿嘿,另一个表达内在功能的方式是'#( - >%:course str keyword)'。 – Thumbnail