Мне нужно отсортировать массивы, но не классические. Более того, в Эрланге! Я говорю о массивах, где каждый элемент представляет собой массив из двух целых чисел.Сортировка массива массивов в Erlang
Например: [[6,0], [12,1], [5,2], [10,3]]
мне нужен этот массив, чтобы быть отсортированы в зависимости от первого элемента каждого массива Как это:
[[5,2], [6,0], [10,3], [12,1]]
Во-первых, мне удастся с этим:
-module(insertSort).
-export([insertion/1,insert/1,insert/2]).
insertion(L) -> lists:foldl(fun insert/2, [], L).
insert([]) -> [].
insert(X,[]) -> [X];
insert([],Y) -> [Y];
insert(X= [X1,_], L= [[H1,_] | _]) when X1 =< H1 -> [X|L];
insert(X,[H|T]) -> [H|insert(X, T)].
Иногда массивы сортируются. Но у меня есть два примера, которые дает мне два странных случая:
Первое: [[10,3], [5,2], [12,1], [6,0]] стали: [[5,2], [6,0], [10,3], [12,1]]]]
Неплохо, но я не могу работать с этой странной конструкцией. Кажется, что у меня есть массив, в котором есть массив внутри, где внутри меня находятся все мои двухэлементные массивы.
Второе: [[5,16], [11,12], [9,8], [16,4]] стали: [[[5,16], «\ т \ б», "\ v \ ф"[16,4]]]
Да, действительно, с этим \ т \ б ..
Я новичок в Erlang, но я удается сделать много вещей один. Мой проект о алгоритме Шанка, который пытается решить y = a^x mod n где y, a и n заданы.
Не могли бы вы помочь мне, сообщив мне, что не так с моим модулем insertSort?
Большое спасибо, извините за мой английский, я старался изо всех сил.
Обратите внимание, что «\ t \ b» - это еще один способ написания [9,8]. Они означают одно и то же. Аналогично, «\ v \ f» совпадает с [11,12]. Это просто, что оболочка будет печатать его как строку, если список состоит из печатных кодов символов. – RichardC
Спасибо @RichardC за это просветление! –
Я не могу попробовать это на своем пэде, но я думаю, что 'lists: sort (L) .' делает то, что вы ищете. – Pascal