【发布时间】:2013-04-09 00:37:27
【问题描述】:
我有一个这样的无限列表:
((1 1)(3 9)(5 17)...)
我想用它制作一个哈希图:
{:1 1 :3 9 :5 17 ...)
“内部”列表的第一个元素基本上是关键字,而第二个元素是值。我不确定在创建时创建我使用的列表是否更容易:
(迭代 (fn [[a b]] [(计算 a) (计算 b)]) [1 1])
(b) 的计算需要 (a),所以我认为在这一点上 (a) 不能是关键字...重点是可以轻松访问给定 (a) 的值 (b)。
任何想法将不胜感激......
--编辑--
好的,我想通了:
(def my-map (into {} (map #(hash-map (keyword (str (first %))) (first (rest %))) my-list)))
问题是:它似乎并不懒惰......即使我没有消费它,它也会永远消失。有没有办法让它偷懒?
【问题讨论】:
-
拥有无限哈希映射的意义何在?您无法在创建时构建该结构,因为哈希映射不支持第 n 次操作。
-
我从不对 nth 感兴趣,但我总是知道关键字,并且我对与该关键字关联的值感兴趣
-
我已经发布了一种在惰性序列创建后创建哈希映射的方法,如果可以,请告诉我
-
Clojure 的地图并不懒惰,而且很难看出它们在哪里是正确的。
-
是的,现在我想这很有意义......
标签: clojure hashmap lazy-sequences