Тема: сортировка списка

Есть следующий список:
((J207-2 2 45.3) (J207-3 3 47.5) (J207-1 0 41.2) (J205-1 3 38.9) (J205-2 2 42.3))
Каждый элемент списка состоит из 3-х элементов.
Первый элемент -строковый
Второй элемент - целое число
Третий элемент - вещественное число.
Как упорядочить этот список по строковому параметру, чтобы получилась следующая последовательность:
((J205-1 3 38.9) (J205-2 2 42.3) (J207-1 0 41.2) (J207-2 2 45.3) (J207-3 3 47.5))

Re: сортировка списка

Так например

(defun sorting (lst / testf res)
  (defun testf (a b)
    (> (car a) (car b))
  )
  (setq index (vl-sort-i lst 'testf))
  (while index
    (setq res (cons (nth (car index) lst) res))
    (setq index (cdr index))
  )
  res
)
(vl-load-com)

Проверим

_$ (sorting '(("J207-2" 2 45.3) ("J207-3" 3 47.5) ("J207-1" 0 41.2) ("J205-1" 3 38.9) ("J205-2" 2 42.3)))
(("J205-1" 3 38.9) ("J205-2" 2 42.3) ("J207-1" 0 41.2) ("J207-2" 2 45.3) ("J207-3" 3 47.5))
_$ 

Re: сортировка списка

Спасибо!
Убедительная победа!

Re: сортировка списка

Не стреляйте, переменную index забыл локализовать. Первая строка такая:

(defun sorting (lst / testf res index )

Re: сортировка списка

Можно и так :
    (setq sort_list (vl-sort lst '(lambda (i j) (< (car i)(car j)))))
    (Пример из хэлпа)
    ~'O'~

Re: сортировка списка

Можно. Только не надо забывать что

Duplicate elements may be eliminated from the list.

... из того же хелпа :(((

Re: сортировка списка

> VK
Спасибо, я и не обращал внимания
Тогда :
    (setq sort_list (vl-sort-i lst '(lambda (i j)
            (< (car i)(car j)))))
? Duplicate elements will be retained in the result...
Дупеля возвращаются

Re: сортировка списка

А если список сосотоит из трехмерных точек? Нужно отсортировать по возростанию координат X и Y одновременно.
Т.е. снизу-вверх-слева-направо.

Re: сортировка списка

Помему я уже придумал сам :))
нужно сортировать по сумме X и Y.
проверить тока надо.

Re: сортировка списка

> Сергей
не совсем правильно, отсортировал по сумме X и квадрату Y.вроде работает. Эх, говорила мама учи математику :)
нисего что я тут сам с собой разговариваю?

Re: сортировка списка

> Сергей
https://www.caduser.ru/forum/topic6814.html