我想我需要一些眼球才能理解这一点
(println record)
(println (keys record) " - " (class record) " : " (:TradeId record) (:Stock record))
(doall (map #(println "Key " % "Value " (% record)) (keys record)))
输出:
{:Stock ATT, :AccountId 1, :TradeId 37, :Qty 100, :Price 117, :Date 2011-02-24T18:30:00.000Z, :Notes SPLIT 1:10, :Type B, :Brokerage 81.12}
(:Stock :AccountId :TradeId :Qty :Price :Date :Notes :Type :Brokerage) - clojure.lang.PersistentHashMap : nil ATT
Key :Stock Value ATT
Key :AccountId Value 1
Key :TradeId Value 37
...
问题是 (:TradeId record)
不起作用,即使它作为 key 存在。迭代所有键和值 - 第 3 行 - 产生正确的值。
尝试重命名 csv 中的列,但行为没有变化。除了这是 csv 中的第一列之外,我看不出与其他列(有效)有什么区别。
HashMap 是通过这样的代码创建的 - 从 CSV 读取记录。 clojure.data.csv 包中的标准代码。
(->> (csv/read-csv reader)
csv-data->maps
(map #(my-function some-args %))
doall))
(defn csv-data->maps
"Return the csv records as a vector of maps"
[csv-data]
(map zipmap
(->> (first csv-data) ;; First row is the header
(map keyword) ;; Drop if you want string keys instead
repeat)
(rest csv-data)))
最佳答案
“第一列”的东西绝对是可疑的,它指向一些不可见的字符,例如 BOM悄悄地将其自身附加到您的第一个关键字上。
要调试,请尝试打印出关键字名称的十六进制。和/或者如果您进行十六进制转储,您可能会看到一些内容,例如使用 head -n 2 file.csv | od -x
,输入文件的前几行。
关于clojure - 为什么这个关键字函数查找在 HashMap 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66058835/