gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:27:53 24 4
gpt4 key购买 nike

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

Clojure 数据:

(def data { :starks "Winter is coming" :Lannisters "Hear me roar" })

我想将上面的转换为
"starks" "winter is coming" "Lannisters" "hear me roar"

我不想要任何标识符/分隔符,但显然 "starks"应始终跟随 "winter is coming"
我试过这个:
(str (keys data) (vals data))

输出这个:
"(:starks :Lannisters)(\"Winter is coming\" \"Hear me roar\")"

这根本不是我想要的......
  • map 数据键和值并不总是相同的,所以它需要是通用的
  • 总是只有一个级别,例如,该值将不包含嵌套映射等。


  • 编辑

    我真正想做的是:

    我试图索引几千 Neo4j节点与 clojure。为了帮助我完成这项任务,我使用了 Neocons Clojure neo4j图书馆。

    根据 documentation , add-to-index接受属性和值,如下所示:
    (nn/add-to-index (:id node) (:name idx) "username" "joe")))

    这就是,在我上面的例子中,看起来像
    (nn/add-to-index (:id node) (:name idx) "starks" "winter is coming" "Lannisters" "Hear me roar")))

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

    该属性因节点而异,所以我试图弄清楚如何以它理解的方式将该映射传递给库。

    Marius Danila的回答让我几乎到了那里。

    正在做
    (map name (apply concat data))

    仍然提示第三个参数,因为它在结果周围有大括号。

    那么,我怎样才能做到这一点?
    难道我只需要写一大堆 if-not块自己构造属性?

    谢谢

    最佳答案

    这应该可以解决问题:

    (map name (apply concat data))

    映射可以被视为一系列键值对,而键值对又表示为 2 个元素的数组。我们将这些对连接起来,然后我们从关键字和字符串中提取名称(对于字符串,它什么都不做,对于关键字,它返回没有 ':' 的位)。

    从您发布的代码中,我猜您会像这样使用它:
    (apply nn/add-to-index (list* (:id node) (:name idx) (map name (apply concat data))))

    关于clojure - 将映射键和值转换为字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018242/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com