2016-07-13 8 views
0

Ich habe ein 2D-Vektor wieClojure: definieren 2D-Primitiven-Arrays wie double [] []

(def data [[1 1] [1 1]]) 

Ich mag würde, um sie in ein Doppel [] [].

i sucht clojure.core und ich versuchte:

1)

(->> (map double-array data) 
    (to-array-2d)) 

Unfortnately gibt es Object [] [] Art der Daten, die in Java-Interop ausfällt.

2)

(->> (map double-array data) 
    (double-array)) 

Natürlich ist es nicht, weil doppelt Array funktioniert erwartet eine Sammlung von Zahlen

3) ich es nicht codieren, da es schwer ist, und ich weiß nicht, ob etwas esle existiere aber ich könnte ein double [] [] mit (make-array Double/Type 2 2) [2 2 hab von alen] initialisieren und dann mit loops füllen. Wie in Java in der Tat.

4) Ein kurzer Weg, aber ein wenig verdreht

(def double-2d-array-type 
    (type (double-array []))) 

    (->> (map double-array data) 
     (into-array double-2d-array-type))) 

Gibt es einen direkten Weg? Wenn es möglich wäre, direkt double [] aufzurufen, wäre es besser.

Like "(in-Array double [] data)"

+0

does '(in-array (Klasse/forName "[D") (map double-array [[1.0 1.2] [1.3 1.5]]))' => '#object [" [[D "0x16eccb2e" [ [D @ 16eccb2e "] adressiere das? – noisesmith

+3

auch: http://stackoverflow.com/questions/3868192/how-do-i-create-a-primitive-two-dimensional-2d-array-of-doubles-in-clojure – birdspider

Antwort

1

einfach entfernen Das erste Argument von into-array:

(into-array (map double-array data)) 

Solange es mindestens ein Element in der Eingangssequenz, ist into-array kann auf seinen Typ schauen, um den gewünschten Typ des Ausgangsarrays zu erraten. Diese Vermutung ist nicht immer, was Sie wollen, wegen der Vererbung, aber für Primitive wird es nie falsch sein.

Verwandte Themen