【发布时间】:2014-06-10 04:08:01
【问题描述】:
基本上我在向量中,在向量中都有向量,并且那些最深的向量包含两个坐标点。例如 [[[3 4] [4 5]] [[5 6] [6 7]]] 我想检查某个 x 和 y 值是否与内部的任何坐标点匹配,如果匹配,则返回 -1。我试过这样做,但该功能不起作用。
(defn check-for-stuff
[vect x y]
(if (not (empty? vect))
(dotimes [n (count vect)]
(if (not (empty? (vect n)))
(dotimes [p (count (vect n))]
(if (and (= (((vect n) p) 0) x)
(= (((vect n) p) 1) y))
-1
))))))
【问题讨论】:
-
为什么要使用这种数据结构?如果你要搜索给定的内容是否存在,索引的东西——集合或哈希映射——会更快(摊销 O(1) 而不是 O(n))。
-
...而且,作为额外的奖励,这意味着您可以使用
(contains? points point)。 (单独比较x和y是愚蠢的,因为您可以将它们作为单位进行比较)。 -
...另外,在一般的 Clojure 中,任何名称中带有
do的东西都应该用于副作用,而不是计算。 -
仅供参考——第一个答案有一些错误;将其编辑为现在实际测试过的内容。
-
...顺便说一句,为什么
-1?如果未找到匹配项,则返回nil或false是常规的,否则返回任何真实值(也就是说,除nil或false之外的任何值)。