"key1 $ value1, key2 $ value2"형식의 문자열을 map을 반환하는 clojure에 함수를 작성하고 싶습니다. 나는 이걸 생각해 냈다.이 클로저 함수가 목록을 반환하지 못하도록하는 방법
(defn get-map
"Returns a map of key value pairs from a string formatted in the form 'key1$value1,key2$value2'"
[line]
(let [result {}]
(for [item (split line #",")]
(let [pair (split item #"\$")]
(assoc result (nth pair 0)
(if (= (.size pair) 2) (nth pair 1) ""))))))
이 코드의 유일한 문제는 목록 내에있는지도를 반환한다는 것입니다.
=>(get-map "key1$value1,key2,value2")
({"key1" "value1"} {"key2" "value2"})
결과를 첫 번째 let 양식의 마지막 표현식으로 반환하려고했지만 그 결과는 빈지도입니다.
(defn get-map
"Returns a map of key value pairs from a string formatted in the form 'key1$value1,key2$value2'"
[line]
(let [result {}]
(for [item (split line #",")]
(let [pair (split item #"\$")]
(assoc result (nth pair 0)
(if (= (.size pair) 2) (nth pair 1) ""))))
result))
=>(get-map "key1$value1,key2,value2")
{}
두 질문 -
- 어떻게 목록 래퍼없이 단지지도를 반환하는 함수를 수정해야합니까?
- 왜 첫 번째 let 양식의 마지막 표현식으로 결과를 반환해도 빈지도가 반환 되었습니까?
더 나은, 더 관용적 인 방법으로 동일한 기능을 쓸 제안이 있으면 감사하겠습니다.