【问题标题】:Comma separated String values from a Vector向量中的逗号分隔字符串值
【发布时间】:2013-07-14 18:41:33
【问题描述】:

我是 Clojure 的新手。我正在定义一个包含字符串值的向量。要求是从输入向量中检索以逗号分隔的字符串值。例如:

(def my-strings ["one" "two" "three"])

我的预期输出应该是:

"one", "two", "three" 

我试过interposejoin如下图:

(apply str (interpose "," my-strings))
(clojure.string/join "," my-strings)

两者都返回"one,two,three",但我需要用双引号括起来的每个字符串"",就像我上面的例子一样。

【问题讨论】:

    标签: string vector clojure comma


    【解决方案1】:

    使用map 将每个字符串用引号括起来,注意我们如何使用\"(一个字符文字)来表示单引号:

    (clojure.string/join "," (map #(str \" % \") my-strings))
    => "one","two","three"
    

    但请注意:字符串是包含在 "" 字符中的文本,但引号本身不是字符串的一部分。所以"one,two,three" 的输出本身并没有错,除非你真的需要文本周围的额外引号。

    【讨论】:

    • 如果您想节省一些击键,也允许使用字符文字:... (map #(str \" % \") my-strings) ...
    • 引号换行也恰好是字符串对象打印机的行为:(clojure.string/join "," (map pr-str my-strings))
    • 太棒了!!那会做的。谢谢各位。
    【解决方案2】:

    您的预期输出绝不可能是“一”、“二”、“三”。那会是什么类型呢?动态类型不是无类型。但是,当然,您可以将其作为字符串。而且这个字符串必须以某种方式在 repl 中表示。

    另外请记住,逗号,在 Clojure 中是空格。

    特殊字符,如“,应转义。在这种情况下:\”。

    您在 repl 中看到的引号不是字符串的一部分(除非转义)。字符串是 one,而不是 "one"。如果您想要 "one",您会看到 "\"one\""

    奥斯卡的答案并不准确。该代码不输出那里显示的内容。它输出 "\"one\",\"two\",\"three\""。 (您可以在 之后添加一个额外的空格,以完全符合您的要求。)。

    尽管如此,他的回答是正确:它给你的正是你想要的。它是一个字符串,由一个单词 one 组成,用双引号括起来,后跟一个逗号等。

    尝试将其到一个文件中。我做到了(在逗号后添加额外的空格)。该文件有:

    "one", "two", "three"
    

    干杯-

    附: LightTable 太棒了!!!

    【讨论】:

      【解决方案3】:

      以下也可以解决问题:

      (let [strs ["one" "two" "three"]]
        (println
          ;;              outer quote       strings    outer quote
          (apply str (flatten [\" (interpose "\",\"" strs) \"]))))
      

      输出:

      user=> (let [strs ["one" "two" "three"]] (println (apply str (flatten [\" (interpose "\",\"" strs) \"]))))
      "one","two","three"
      nil
      user=>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        相关资源
        最近更新 更多