我有一个列表,如下所示:
({:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})
我想把它转换成哈希图:
{:2 9 :5 8 :6 10}
List是从mysql数据库创建的,我不知道我能不能从数据库中获得其他格式的数据,这将更容易转换为一个hashmap,我使用了java.jdbc查询函数。
有人能帮我吗?
(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}
但是,正如我所说,我认为这是不必要的风险。为什么不把数字当作钥匙呢?
进一步使用数字(字符串)作为关键字:
关于符号的读者文档说
- 符号以非数字字符开头
- 关键字就像符号,除了:。。。(进一步限制)
另一个变体。(如果你有很多数据,可能比Thumbnail的效率低。)
(zipmap (map (comp keyword str :course) data)
(map :mark data))
其中CCD_ 2是问题中指定的格式。