(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