Clojure 当需要访问索引时,存储和操作2D数据的惯用方法
我正在研究代码2018的出现,其中我需要存储位置的2D地图,然后根据它们的坐标对它们进行映射+过滤。我在考虑将位置存储在2D向量中,这样向量的索引就表示了它们的坐标,因为这是我在命令式语言中应该做的 但是,大多数序列操作仅将元素传递给函数,因此无法从传递给的函数(例如,Clojure 当需要访问索引时,存储和操作2D数据的惯用方法,clojure,Clojure,我正在研究代码2018的出现,其中我需要存储位置的2D地图,然后根据它们的坐标对它们进行映射+过滤。我在考虑将位置存储在2D向量中,这样向量的索引就表示了它们的坐标,因为这是我在命令式语言中应该做的 但是,大多数序列操作仅将元素传递给函数,因此无法从传递给的函数(例如,map)访问元素的索引。是的,map-indexed存在,但每次对数据进行操作时,对其进行两次嵌套调用感觉不是很干净 我看到一些人建议存储索引,或者在本例中是(x,y)坐标对,向量中的元素:[[0,0]“loc1”][[0,1]“
map
)访问元素的索引。是的,map-indexed
存在,但每次对数据进行操作时,对其进行两次嵌套调用感觉不是很干净
我看到一些人建议存储索引,或者在本例中是(x,y)坐标对,向量中的元素:[[0,0]“loc1”][[0,1]“loc2”…]
。这会比使用嵌套的映射索引调用更好吗?或者,除了存储二维数据并使用其索引访问数据之外,还有更干净、更惯用的替代方法吗?您可以使用:
对于这个特定的问题,问题的2D性质实际上并不重要。因此,我建议将点存储为地图向量,如下所示:
{:x x
:y y
:nearest-point :A}
地点包括:
{:x x
:y y
:name :A}
比如说。对于每个点,在位置上循环并保存最近的位置。然后,扔掉那些无限的:
(remove #(is-it-infinite? %) points)
然后
和计算每个组的大小以得到最终答案
(remove #(is-it-infinite? %) points)
(group-by :nearest-point points)