Clojure中的简单2D数组

时间:2018-08-06 06:47:39

标签: clojure

我仍在学习Clojure,似乎无法找到一个简单的答案。我已经看到了类似的问题,这些问题使用了特定于OP问题的复杂代码来回答,所以请让我知道以下内容的最准确或可接受的版本:

int[][] arrayTest = new int[width][height];
...
for (int x = 0; x < width; x++) {
  for (int y = 0; y < height; y++) {
    int a = arrayTest[x][y];
    if (a < 100) {
      arrayTest[x][y] = 0;
    }
  }
}

2 个答案:

答案 0 :(得分:6)

直译很简单:

(def array-test
  (make-array Integer/TYPE width height))

(doseq [x (range width)
        y (range height)]
  (when (< (aget array-test x y) 100)
    (aset-int array-test x y 0)))

但是请注意,数组在Clojure中并不常用。除非您想进行快速计算或使用现有的Java代码,否则通常不应该创建数组和其他可变数据结构。最有可能的是,您可以使用Clojure的persistent collections来实现。

答案 1 :(得分:0)

表示为序列序列...

user=> (doc repeat)
-------------------------
clojure.core/repeat
([x] [n x])
  Returns a lazy (infinite!, or length n if supplied) sequence of xs.
nil

user=> (def width 8)
#'user/width
user=> (def height 6)
#'user/height

user=> (repeat width 0)
(0 0 0 0 0 0 0 0)

user=> (pprint (repeat height (repeat width 0)))
((0 0 0 0 0 0 0 0)
 (0 0 0 0 0 0 0 0)
 (0 0 0 0 0 0 0 0)
 (0 0 0 0 0 0 0 0)
 (0 0 0 0 0 0 0 0)
 (0 0 0 0 0 0 0 0))
nil