Clojure构建2D哈希映射

时间:2016-08-13 10:26:52

标签: clojure

所以我试图创建一个哈希映射,其中每个键都是一个板上的项目。

  

{[0 0] -1,[0 1] -1,[0 2] -1,[0 3] -1,[0 4] -1,[0 5] -1,[0 6] -1,   [0 7] -1,[0 8] -1,[0 9] -1,[1 0] -1,[1 1] -1,[1 2] -1,[1 3] -1,   [1 4] -1,[1 5] -1,[1 6] -1,[1 7] -1,[1 8] -1,[1 9] -1,[2 0] -1,   [2 1] -1,[2 2] -1,[2 3] -1,[2 4] -1,[2 5] -1,[2 6] -1,[2 7] -1,   [2 8] -1,[2 9] -1,[3 0] -1,[3 1] -1,[3 2] -1,[3 3] -1,[3 4] -1,   [3 5] -1,[3 6] -1,[3 7] -1,[3 8] -1,[3 9] -1,[4 0] -1,[4 1] -1,   [4 2] -1,[4 3] -1,[4 4] -1,[4 5] -1,[4 6] -1,[4 7] -1,[4 8] -1,   [4 9] -1,[5 0] -1,[5 1] -1,[5 2] -1,[5 3] -1,[5 4] -1,[5 5] -1,   [5 6] -1,[5 7] -1,[5 8] -1,[5 9] -1,[6 0] -1,[6 1] -1,[6 2] -1,   [6 3] -1,[6 4] -1,[6 5] -1,[6 6] -1,[6 7] -1,[6 8] -1,[6 9] -1,   [7 0] -1,[7 1] -1,[7 2] -1,[7 3] -1,[7 4] -1,[7 5] -1,[7 6] -1,   [7 7] -1,[7 8] -1,[7 9] -1,[8 0] -1,[8 1] -1,[8 2] -1,[8 3] -1,   [8 4] -1,[8 5] -1,[8 6] -1,[8 7] -1,[8 8] -1,[8 9] -1,[9 0] -1,   [9 1] -1,[9 2] -1,[9 3] -1,[9 4] -1,[9 5] -1,[9 6] -1,[9 7] -1,   [9 8] -1,[9 9] -1}

到目前为止我已经

(zipmap (for [x (range 10) y (range 10)] [x y]) (repeat -1))

如果我想要按键排序:

(into (sorted-map) (zipmap (for [x (range 10) y (range 10)] [x y]) (repeat -1)))

在Python中,我可以提出以下字典理解:

board = {(x, y): -1 for x in range(5) for y in range(5)}

我想知道我是否可以在Clojure中做类似的事情,比我目前的方法更具可读性/效率

1 个答案:

答案 0 :(得分:1)

如果要将键和值放在列表推导中,可以这样做:

(into {} (for [x (range 10) y (range 10)] [[x y] -1]))

如果您需要有序的地图,只需将{}替换为(sorted-map)

(into (sorted-map) (for [x (range 10) y (range 10)] [[x y] -1]))