如何在clojure中返回一张地图

时间:2016-02-17 04:20:54

标签: clojure

我想知道如何定义一个返回地图的函数。现在我有两个辅助功能。 一个是:

(string->ascii str) 

可以将字符串转换为ascii代码,例如:

user=> (string->ascii "ouch")
(79 85 67 72)
user=> (string->ascii "gulp")
(71 85 76 80)

另一个功能是:

(ascii->num96 seq)

可以将列表转换为小数,例如:

user=> (ascii-num96 '(79 85 67 72))
70684008
user=> (ascii-num96 '(71 85 76 80))
63606992

现在,我需要定义一个函数“make-dict”将这两个函数一起调用并返回一个map。结果应该是:

user=> (make-dict ["ouch" "gulp"])
{"ouch" 70684008, "gulp" 63606992}

我写了一些代码,但它不起作用,如:

(defn make-dict [vector]
(map (ascii-num96 #(string-ascii %)) vector))

是否有人可以教导如何获得这样的结果?非常感谢你!

2 个答案:

答案 0 :(得分:3)

这个怎么样?

(defn make-dict [words]
  (zipmap words (map (comp ascii-num96 string->ascii) words)))

你基本上需要2个seqs - words(map (comp ascii-num96 string->ascii) words) - 并将它们压缩到地图中。

答案 1 :(得分:2)

或没有zipmap

(into {} (map vector names (map (comp ascii-num96 string->ascii) names)))

正在发生的两件事可能会引起人们的兴趣,其中包括一些'技巧。一个是你可以使用map多个输入序列,你的映射函数'只需要能够处理相同数量的参数。这里的映射函数是vector,它接受​​一个单词和一个数字并将它们组合在一起,如下所示:[" gulp" 34234]。

另一件事是函数into将向量解释为键/值对。

相关问题