2015-03-19 2 views
0

У меня есть карта, как это:Как преобразовать карту в коллекцию без ключей

{1 [1 4 7], 2 [2 5 8], 0 [3 6 9]} 

Я хочу, чтобы написать функцию, которая возвращает это:

[[1 4 7] [2 5 8] [3 6 9]] 

В качестве примечания, Я получаю карту, делая это:

(group-by #(mod % 3) [1 2 3 4 5 6 7 8 9]) 

Если кто-то имеет ярлык для перехода от вектора, как это: [1 2 3 4 5 6 7 8 9] т o второй, показанный выше, пожалуйста, дайте мне знать!

ответ

2

Имеет ли значение вопрос? vals берет карту и возвращает последовательность значений. Но порядок не определен для карты, поэтому порядок возвращаемой последовательности значений произволен.

> (vals {1 [1 4 7], 2 [2 5 8], 0 [3 6 9]}) 
([3 6 9] [1 4 7] [2 5 8]) 

Сортировка:

> (sort (vals {1 [1 4 7], 2 [2 5 8], 0 [3 6 9]})) 
([1 4 7] [2 5 8] [3 6 9]) 
+0

Это работает! Заказ не имеет значения для моей текущей проблемы. Спасибо, сэр! –

3

Как ваш другой вопрос: (partition 3 v) создает матрицу, и (apply map vector m) является идиомой транспонировать матрицу т (как это работает упражнения для читателя или Google это?). Таким образом:

> (apply map vector (partition 3 [1 2 3 4 5 6 7 8 9])) 
([1 4 7] [2 5 8] [3 6 9]) 

Есть и другие способы, конечно. Например, при деструктурировании:

> (let [{ a 0 b 1 c 2 } (group-by #(mod % 3) [1 2 3 4 5 6 7 8 9])] [b c a]) 
[[1 4 7] [2 5 8] [3 6 9]] 
Смежные вопросы