2010-12-06 15 views
10

Clojure'da, yinelenen öğelerin alt dizilerine nasıl bir sıra ayırırsınız? Örneğin. : Ben Clojure daha iyi anlamaya çalışarak bazı örneklerle etrafında oynuyorum ve bir süre bu bir tıkanmıştımYinelenen öğelerin dizilerine bir diziyi dağıtma (clojure)

[1 2 2 3 3 3 4 2 2 1 1 1] 

[[1] [2 2] [3 3 3] [4] [2 2] [1 1 1]] 

için.

cevap

15
user> (partition-by identity [1 2 2 3 3 3 4 2 2 1 1 1]) 
((1) (2 2) (3 3 3) (4) (2 2) (1 1 1)) 

user> (vec (map vec (partition-by identity [1 2 2 3 3 3 4 2 2 1 1 1]))) 
[[1] [2 2] [3 3 3] [4] [2 2] [1 1 1]] 
+0

Awesome! Böyle bir işlevin (kimlik) var olduğunu bile bilmiyordum. Teşekkürler! – aeter

+0

(vec (map vec ...)) yerine clojure.walk işlevlerini kullanabilirsiniz: (clojure.walk/walk vec vec ...) – amalloy

2

(birinci harita (juxt sayısı) (bölme-, kimlik [1 1 1 3 2 2]))

((3 1) (1 3) (2 2))

Üçü, sonra üçte biri, ardından iki ikişer!