首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将映射键和值转换为字符串数组

将映射键和值转换为字符串数组
EN

Stack Overflow用户
提问于 2013-04-15 14:48:41
回答 4查看 3.3K关注 0票数 7

如何将clojure映射转换为字符串(几乎是键值对),如下所示:

Clojure数据:

代码语言:javascript
复制
(def data { :starks "Winter is coming" :Lannisters "Hear me roar" })

我想把上面的内容转换成

代码语言:javascript
复制
"starks" "winter is coming" "Lannisters" "hear me roar"

我不希望在"starks"之间有任何标识符/分隔符,但是很明显,"winter is coming"应该总是跟在后面

我试过这个:

代码语言:javascript
复制
(str (keys data) (vals data))

它的输出如下:

代码语言:javascript
复制
"(:starks :Lannisters)(\"Winter is coming\" \"Hear me roar\")"

这不是我想要的。

  • 映射数据键和值并不总是相同的,因此它需要是泛型的。
  • 总是只有一个级别,例如,该值将不包含嵌套映射等等。

编辑

我真正想做的是:

我正在尝试用clojure索引几千个Neo4j节点。为了帮助我完成这个任务,我使用了新保守主义克洛尔neo4j库。

根据文档add-to-index接受如下的属性和值:

代码语言:javascript
复制
(nn/add-to-index (:id node) (:name idx) "username" "joe")))

在我上面的例子中,看起来

代码语言:javascript
复制
(nn/add-to-index (:id node) (:name idx) "starks" "winter is coming" "Lannisters" "Hear me roar")))

现在,我有了我的节点,我可以使用(:data node)访问节点属性,这给了我一个clojure映射。

属性在每个节点之间都有很大的不同,所以我试图找出如何以它理解的方式将该映射传递给库。

达尼拉马吕斯的回答使我几乎如愿以偿。

正在做什么

代码语言:javascript
复制
(map name (apply concat data))

仍然抱怨第三个参数,因为它有围绕结果的大括号。

所以,我怎样才能做到这一点?我是否只需要编写大量的if-not块来自己构建属性?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-16 18:19:07

(nn/add-to-index ...)函数只接受四个参数。节点、索引和一个键/值对。所以你有太多循环你的数据,比如。

代码语言:javascript
复制
(doseq [[k v] data]
  (nn/add-to-index (:id node) (:name idx) (name k) (clojure.string/lower-case v))))

与Clojure中的str函数不同,add-to-index函数更加有限,而且不接受变量参数列表。

票数 2
EN

Stack Overflow用户

发布于 2013-04-15 15:03:15

这应该能起作用:

代码语言:javascript
复制
(map name (apply concat data))

映射可以看作是键值对的序列,而键值对又表示为由2个元素组成的数组。我们将这对连接起来,然后从关键字和字符串中提取名称(对于字符串,这没有任何作用,对于关键字,它返回没有‘:’的位)。

根据您发布的代码,我猜您会这样使用:

代码语言:javascript
复制
(apply nn/add-to-index (list* (:id node) (:name idx) (map name (apply concat data))))
票数 8
EN

Stack Overflow用户

发布于 2013-04-15 16:09:31

您可以使用向量具有类似于随机访问的数组:

代码语言:javascript
复制
=> (def v (vec (map name (apply concat data))))
=> (v 0)
;"starks"
=> (v 1)
;"Winter is coming"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16018242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档