【问题标题】:How to create a string list in Clojure?如何在 Clojure 中创建字符串列表?
【发布时间】:2012-08-11 17:22:40
【问题描述】:

我想在 Clojure 中创建一个与以下 Java 代码等效的字符串列表:

List<String> cities = Arrays.asList(new String[] {"Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm" });

:但我不确定确切的语法

【问题讨论】:

  • 作为旁注,至少在较新的 Java 版本中,您可以使用 Arrays.asList("Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris", "Stockholm")
  • 献给所有对 Clojure 感兴趣的人。在 Clojure 中,列表不提供直接访问,对于直接访问,您需要 Vector(在 Clojure 中)。

标签: clojure


【解决方案1】:

严格来说,上面提供的示例将产生向量。列表可以通过以下方式产生:

(list "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")

或更短:

'("Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")

在某些情况下,这种差异可能很重要。

【讨论】:

  • 前面的勾号也会阻止评估列表中的任何内容。了解 (list "hello" (str "hello " "world") "world") ==&gt; "hello hello world world" 和 '("hello" ( str "hello " "world") "world") 产生与 (str "hello" "world") 完整的销售
【解决方案2】:
(def cities ["Berlin" "Brussels" "Helsinki" "Madrid" "Oslo" "Paris" "Stockholm"])

http://en.wikibooks.org/wiki/Clojure_Programming/Tutorials_and_Tips#Clojure_for_Java_Programmers

【讨论】:

    【解决方案3】:

    一般情况下,您可以使用要创建的集合的名称作为创建它的函数(容易记住吧?):

    (vector     "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm")
    (hash-map   "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
    (sorted-map "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
    (array-map  "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris")
    (hash-set   "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris" "Stockholm")
    (sorted-set "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris" "Stockholm")
    

    如果您事先不知道需要创建什么类型,也可以使用into

    (defn make-trip [trip cities]
        (into trip cities))
    

    并传递类似(make-trip #{"home"} ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris"])的东西

    【讨论】:

      【解决方案4】:

      这些都不等同于:

      List<String> cities = Arrays.asList(new String[] {"Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm" });
      

      这更接近实际问题的答案:

      user=> (java.util.ArrayList. [1 2 3])
      #<ArrayList [1, 2, 3]>
      user=> (.get (java.util.ArrayList. [1 2 3]) 0)
      1
      

      【讨论】:

        【解决方案5】:

        怎么样:

        (def cities ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris","Stockholm"])
        

        逗号是可选的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-09
          相关资源
          最近更新 更多