从clojure中的数组构建hashmap
首先,我是12月5日在铁场学习Java后端工程的学生。本课程由大约60%的Java、25%的JavaScript和15%的Clojure组成 我得到了以下问题(在评论中概述): 使用从clojure中的数组构建hashmap,clojure,hashmap,zipmap,Clojure,Hashmap,Zipmap,首先,我是12月5日在铁场学习Java后端工程的学生。本课程由大约60%的Java、25%的JavaScript和15%的Clojure组成 我得到了以下问题(在评论中概述): 使用zipmap时,我也遇到了类似的问题,但我确信这一次我遗漏了一些东西。代码已编译,但无法运行 具体来说,我无法更新'if'的false子句中的hashmap索引 我已经在REPL中测试了这个函数的所有组件,它们是独立工作的。但我正在努力把它们放在一起 以下是调用单词列表的代码,供您参考 (let [word-li
zipmap
时,我也遇到了类似的问题,但我确信这一次我遗漏了一些东西。代码已编译,但无法运行
具体来说,我无法更新'if'的false子句中的hashmap索引
我已经在REPL中测试了这个函数的所有组件,它们是独立工作的。但我正在努力把它们放在一起
以下是调用单词列表的代码,供您参考
(let [word-list ["aardvark" "apple" "zamboni" "phone"]]
(printf "index-words(%s) -> %s\n" word-list (index-words word-list)))
我的希望不是从社区得到一个有效的解决方案,而是得到一些提示,让我的大脑朝着正确的方向移动。函数
assoc
不会修改索引。您需要使用assoc
返回的新值。对于conj
,情况也是如此:它不会修改您传递给它的映射
我希望,这个答案和你们期望得到的答案是一样的:只是一个你们的问题所在的指针
顺便说一句:如果您可以使用持久列表
,当使用减少
而不是循环
和重复
时,这将变成一行。一个有趣的功能可能是
中的更新
享受Clojure带来的乐趣。该功能满足您的需求
- 您可以使用
作为其判别函数参数。信息技术 返回字符串的第一个字符,如果没有,则返回first
:nil
比(第一个单词)
简单(子单词01)
- 使用
删除键dissoc
的条目李>nil
在clojure中很少需要使用显式
循环
s。大多数常见的控制模式都是在函数中捕获的,如groupby
。此类函数具有函数和可能的集合参数。最常见的例子是map
和reduce
。这本书对他们来说是一本非常有用的指南 这正是我想要的答案。我将继续调查和试验。我会在这个问题有效的时候用我的最终解决方案来更新我的问题。所以我一直在玩弄这个问题,并取得了一些进展,但我被卡住了……”(reduce conj{word list)'产生'=>{aardvark''zamboni''apple''phone'}'但我的目标是'{a'[“aardvark”“apple”],“z”[“zamboni”],“p”[“phone”]}或'.{a[“aardvark”“apple”],:z[“bonzami”],:p[“phone”]}@cptully,这是一组独特的元素集合。您需要一个哈希映射,其中包含值{:a1,:b2}
@cptully的键,这需要一个更复杂的reduce函数。请记住,reduce
接受一个fn,它包含两个参数:累加器(以及最终结果)和当前项。您可以为此编写自己的函数。标准函数频率的来源可能会给您带来很大的启发。
(let [word-list ["aardvark" "apple" "zamboni" "phone"]]
(printf "index-words(%s) -> %s\n" word-list (index-words word-list)))