Clojure:如何获取符号的*值*作为关键字
我从如下文件中获得了一些数据:Clojure:如何获取符号的*值*作为关键字,clojure,Clojure,我从如下文件中获得了一些数据: A abcdefghi... B bcdefghij... 我想将其转换为一组地图,每行一张: A: abcdefghi B: bcdefghij 但我不知道该怎么做。我可以把我想要的两个部分变成符号 part1 and part2 但如果使用 #{(keyword part1) part2} 我明白了 但是,有没有办法获得第1部分的值而不是该名称本身呢?你需要阅读并澄清你的问题 此语法: #{ 3 1 4 } 创建一组值,而不是贴图。您还需要澄
A abcdefghi...
B bcdefghij...
我想将其转换为一组地图,每行一张:
A: abcdefghi
B: bcdefghij
但我不知道该怎么做。我可以把我想要的两个部分变成符号
part1
and
part2
但如果使用
#{(keyword part1) part2}
我明白了
但是,有没有办法获得第1部分的值而不是该名称本身呢?你需要阅读并澄清你的问题 此语法:
#{ 3 1 4 }
创建一组值,而不是贴图。您还需要澄清第1部分
和第2部分
——它们是什么
此外,关键字文字的开头有冒号:
{ :a 1 :b 2 } ; some map
有一个很好的例子。特别是阅读“获取Clojure”和Clojure备忘单。使用
Ctrl-v选项卡将文本回送到测试文件中:
$ echo "A abcde
B bcdef" > test.txt
测试是否正确写入文件:
$ cat test.txt
A abcde
B bcdef
然后,在clojure REPL中,编写函数:
(defn file2cells [fpath]
(map #(clojure.string/split % #"\t")
(clojure.string/split (slurp fpath) #"\n")))
(defn keywordize-first [vec-list]
(map (fn [[k v]] [(keyword k) v]) vec-list))
(defn file2maps [fpath]
(into {} (keywordize-first (file2cells fpath))))
(file2maps "test.txt")
;; => {:A "abcde", :B "bcdef"}
应用以下功能:
(defn file2cells [fpath]
(map #(clojure.string/split % #"\t")
(clojure.string/split (slurp fpath) #"\n")))
(defn keywordize-first [vec-list]
(map (fn [[k v]] [(keyword k) v]) vec-list))
(defn file2maps [fpath]
(into {} (keywordize-first (file2cells fpath))))
(file2maps "test.txt")
;; => {:A "abcde", :B "bcdef"}
对不起,我不清楚;数据是(“A”“abcdef…”),我将它放入第1部分和第2部分,第一部分和第二部分。。。然后一个带有{a:“abcdef”}的映射就是我想要的结果。。。但是我没有看到如何评估part1来获得它。你不能有{A:“abcdef”}
。您可能有{:A“abcdef”}
(关键字作为映射键)或{“A”“abcdef”}
(字符串作为映射键)。实际上,您可以使用{A“abcdef”}
(符号作为映射键)-但是符号作为映射键通常很麻烦。