如何在Clojure中创建一个字符串列表?

时间:2011-02-22 17:20:13

标签: clojure

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

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

:但我不确定确切的语法

5 个答案:

答案 0 :(得分:14)

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

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

或更短:

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

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:6)

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

(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"])

的内容

答案 3 :(得分:2)

怎么样:

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

逗号是可选的。

答案 4 :(得分:2)

这些都不等同于:

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