Clojure在地图和向量之间决定

金里昂

我有两种情况说明如何格式化正在使用的数据:

  • 情况1:

    {:key ["val1" "val2" "val3"]}
    
  • 情况2:

    {:key {"Title1" ["Val1" "Val2"] "Title2" ["Val3" "Val4"] "Title3" []}}
    

我想要的是确定案例并使用基于案例的数据进行处理。

这是我所拥有的:

(let [val {"Produkt" ["bla" "blub"] "Test" ["12" "34" "45"]}]
  (cond
    (not (= (some map? val) nil))
      (for [v val]
        (str v ", "))
    :else
      (for [v val]
        (do (first v)
          (for [c (second v)] 
            (str c ", "))))))

输出的格式不正确。我必须删除sscce的一些代码。情况2的输出应如下所示:

("Produkt" ("12, " "34, " "45, ") "Test" ("bla, " "blub, "))

情况1的输出应如下所示:

("val1" "val2" "val3")

问题在于,对于情况2,该功能当前正常工作(此sscce中的格式问题除外),但对于情况1则不然。对于情况1,它仅打印出键的第一个字母。我认为这是因为检查条件后它会跳到else块,但是我不知道如何找到更好的条件来解决我的问题。

谢谢你的帮助。

戴夫·雅伍德(Dave Yarwood)

一种简化此方法的好方法是使用multimethod根据实际数据的表示方式,多方法的分派函数可以像调用type输入一样简单,可能的分派值类似于clojure.lang.PersistentArrayMapclojure.lang.PersistentVector较安全的调度方法将允许使用其他类型的顺序集合(例如列表和Java数组)以及其他类型的关联集合(例如排序的映射)。您可以执行以下操作:

(defmulti foo (juxt map? sequential?))

(defmethod foo [true false]  ; input is a map of some sort
  [val]
  (mapcat (fn [[k vs]] [k (apply str (interpose ", " vs))]) val))

(defmethod foo [false true] ; input is a list, vector, etc.
  [val]
  (apply str (interpose ", " val)))

(foo {"Produkt" ["bla" "blub"] "Test" ["12" "34" "45"]})
;=> ("Produkt" "bla, blub" "Test" "12, 34, 45")

(foo ["val1" "val2" "val3"])    
;=> "val1, val2, val3"

这些与您在问题中给出的输出不完全相同,因为这让我有些困惑,您的代码到底想完成什么,但是希望这至少说明了如何为不同类型的参数分派不同的代码使用多种方法很容易做到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Clojure中的向量构造地图

来自分类Dev

在htons和htonl之间决定

来自分类Dev

更新Clojure中的地图向量中的值

来自分类Dev

在 Clojure 中从地图构建嵌套向量

来自分类Dev

在Clojure中测试向量和嵌套向量

来自分类Dev

类地图容器和类向量容器之间的歧义模板专业化

来自分类Dev

按地图中的值对地图中的向量对这些向量进行排序-Clojure

来自分类Dev

在Clojure中使用地图替换向量

来自分类Dev

Clojure方法来更新向量中的地图

来自分类Dev

Clojure:如何合并具有相同值的地图向量

来自分类Dev

Clojure:向地图内的向量添加元素

来自分类Dev

在Clojure中,如何合并两个地图向量?

来自分类Dev

在 clojure 中操作地图的两个向量

来自分类Dev

在 clojure 中,为什么 core.match 向量内的地图?

来自分类Dev

数组和向量之间的区别

来自分类Dev

如何Spring MVC的决定的HomeController和JSP之间的冲突?

来自分类Dev

Clojure中“->”和“->>”之间的区别

来自分类Dev

Clojure中的向量和类型转换

来自分类Dev

有没有办法使地图的Clojure向量上的地图使用破坏性绑定?

来自分类Dev

Clojure:对地图向量中的地图中的每个值应用函数

来自分类Dev

Clojure:将函数应用于地图向量中的地图中的每个值

来自分类Dev

有没有办法使地图的Clojure向量上的地图使用破坏性绑定?

来自分类Dev

Clojure; 如何遍历地图向量,以便知道索引,以便能够在地图中更新?

来自分类Dev

计算表示稀疏向量的地图之间的距离C ++

来自分类Dev

Clojure中两个地图之间的交点

来自分类Dev

Clojure:地图地图

来自分类Dev

Android地图:OnMapReady()和OnMapLoaded()之间的区别

来自分类Dev

保持索引和地图索引之间的区别?

来自分类Dev

Clojure中的向量与向量

Related 相关文章

  1. 1

    从Clojure中的向量构造地图

  2. 2

    在htons和htonl之间决定

  3. 3

    更新Clojure中的地图向量中的值

  4. 4

    在 Clojure 中从地图构建嵌套向量

  5. 5

    在Clojure中测试向量和嵌套向量

  6. 6

    类地图容器和类向量容器之间的歧义模板专业化

  7. 7

    按地图中的值对地图中的向量对这些向量进行排序-Clojure

  8. 8

    在Clojure中使用地图替换向量

  9. 9

    Clojure方法来更新向量中的地图

  10. 10

    Clojure:如何合并具有相同值的地图向量

  11. 11

    Clojure:向地图内的向量添加元素

  12. 12

    在Clojure中,如何合并两个地图向量?

  13. 13

    在 clojure 中操作地图的两个向量

  14. 14

    在 clojure 中,为什么 core.match 向量内的地图?

  15. 15

    数组和向量之间的区别

  16. 16

    如何Spring MVC的决定的HomeController和JSP之间的冲突?

  17. 17

    Clojure中“->”和“->>”之间的区别

  18. 18

    Clojure中的向量和类型转换

  19. 19

    有没有办法使地图的Clojure向量上的地图使用破坏性绑定?

  20. 20

    Clojure:对地图向量中的地图中的每个值应用函数

  21. 21

    Clojure:将函数应用于地图向量中的地图中的每个值

  22. 22

    有没有办法使地图的Clojure向量上的地图使用破坏性绑定?

  23. 23

    Clojure; 如何遍历地图向量,以便知道索引,以便能够在地图中更新?

  24. 24

    计算表示稀疏向量的地图之间的距离C ++

  25. 25

    Clojure中两个地图之间的交点

  26. 26

    Clojure:地图地图

  27. 27

    Android地图:OnMapReady()和OnMapLoaded()之间的区别

  28. 28

    保持索引和地图索引之间的区别?

  29. 29

    Clojure中的向量与向量

热门标签

归档