2011-02-22 9 views
5

Quiero crear una lista de cadenas en Clojure equivalente al siguiente código Java:¿Cómo crear una lista de cadenas en Clojure?

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

: pero no estoy seguro acerca de la sintaxis exacta

+3

Como nota al menos al menos en las versiones de Java más recientes, puede usar 'Arrays.asList (" Berlin "," Brussels "," Hel sinki "," Madrid "," Oslo "," París "," Estocolmo ")'. – ponzao

+0

posible duplicado de [Conversión de estructuras de datos Clojure a colecciones Java] (http://stackoverflow.com/questions/4313505/converting-clojure-data-structures-to-java-collections) –

Respuesta

14

Estrictamente hablando, los ejemplos proporcionados anteriormente producirá vectores. Lista puede ser producido de la siguiente manera:

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

o más corto:

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

En algunos casos, esta diferencia podría ser importante.

+5

la marca al frente también evitará que se produzca la lista de ser evaluado es bueno estar al tanto de la diferencia entre (list "hello" (str "hello " "world") "world") ==> "hello hello world world" y '("hello" (str "hello" "world") "world") produce su seld con el (str "hello" "world") intacto –

2

¿Qué tal:

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

Las comas son opcionales

5

, en general, se puede utilizar el nombre de una colección que desea crear la función para crearlo (fácil de recordar eh?):

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

o puede utilizar into si usted no sabe de antemano qué tipo necesitarás crear

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

y pasarlo algo así como (make-trip #{"home"} ["Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris"])

2

Ninguno de estos son en realidad equivalente a:

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

Esto es mucho más cerca de una respuesta a lo que en realidad se le preguntó:

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