如何解决带坐标的Clojure地图
我是Clojure的新手,我不知道如何实现类似PHP的数组。我想创建一个具有3个坐标对的数组。
php示例
data = array();
data[] = array('x' => 1,'y' = 1);
data[] = array('x' => 5,'y' = 7);
data[] = array('x' => 10,'y' = 3);
but in a loop like
for(i = 0; i <= 3; i++) {
data = array('x' => i,'y' => rand();
}
如何创建类似的Clojure地图?
解决方法
PHP以其他语言无法比拟的方式将线性整数索引数据结构和键值关联数据结构的思想混为一谈,这使得将示例移植到其他任何事物上都有些困难,但这应该非常接近到您想要的:
(def foo (map (fn [x] {:x x :y (rand-int 5)}) (range 3)))
我们定义了一个绑定foo
,它是将内联函数映射到序列范围0-2的结果的列表(从技术上讲是一个懒惰的seq,但请保持简洁),并返回一个映射(花括号),其中包含关键字条目:x
(是序列中的数字)和:y
关键字条目,其是0-4之间的随机整数。因此,最终结果是一个3张地图的列表,其中包含x和y值,就像您的示例一样。
有几种不同的方法可以做到这一点。
如Jared所说,您可以使用map
。
另一个选择是使用for
user=> (range 4)
(0 1 2 3)
user=> (for [x (range 4)] {"x" x "y" (rand-int 5)})
({"x" 0,"y" 4} {"x" 1,"y" 0} {"x" 2,"y" 2} {"x" 3,"y" 0})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。