我有一个字符串" 101,R:102,R:301,L:302,L:999" ,我想写一个函数,它处理字符串并返回如下所示的地图:
{
:left [301 302],
:right [101 102],
:unknown [999]
}
以下是我写的内容,但我坚持使用reduce功能。任何帮助将不胜感激。感谢。
(defn process
[data return-hash]
(let [id-side (str/split data #",")
id (first id-side)
side (second id-side)]
(cond
(= "L" side) (update-in return-hash [:left] conj id)
(= "R" side) (update-in return-hash [:right] conj id)
:else (update-in return-hash [:unknown] conj id)
)
))
(defn get-hash
[data]
(let [id-side-array (str/split data #":")]
(reduce
// a function calling process() method to update the map
id-side-array)
))
(get-hash "101,R:102,R:301,L:302,L:999")
=>
{
:left [301 302],
:right [101 102],
:unknown [999]
}
答案 0 :(得分:4)
你实际上几乎就在那里:
更改process
的参数顺序,以便return-hash
成为第一位;
在(fnil conj [])
来电中使用conj
代替update-in
;
在(reduce process {} id-side-array)
中使用get-hash
。