Автор | Сообщение |
|
| |
Пост N: 3619
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.10.13 16:09. Заголовок: Подскажите с сортировкой массива
Proc main local ams:={} local i aadd(ams,"10_2012") aadd(ams,"02_2013") aadd(ams,"11_2012") aadd(ams,"12_2012") aadd(ams,"01_2013") asort(ams,,,{|x,y| x>y}) for i=1 to len(ams) ? ams next wait return Нужно что бы массив был отсортирован в следующем порядке 10_2012 11_2012 12_2012 01_2013 02_2013 что то делал когда то и забыл как ;)
|
|
|
Ответов - 3
[только новые]
|
|
|
| |
Пост N: 16
Зарегистрирован: 27.07.10
|
|
Отправлено: 11.10.13 16:26. Заголовок: Вариант: ... asort(a..
Вариант: ... asort(ams,,,{|x,y| (substr(x,4,4)+left(x,2))<(substr(y,4,4)+left(y,2))}) ... Выдаёт: 10_2012 11_2012 12_2012 01_2013 02_2013
|
|
|
|
| |
Пост N: 3620
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.10.13 16:39. Заголовок: Vladimir Спасибо ! ..
Vladimir Спасибо ! Выкрутился так asort(ams,,,{|x,y| tc(x)<tc(y)}) Func tc(c) local ret ret:=stod(right(c,4)+left(c,2)+"01") return ret
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 16.12.09
|
|
Отправлено: 29.05.15 23:14. Заголовок: Решения для выхода и..
Решения для выхода из положения конечно можно найти и не одно. Однако при этом существенно замедляется скорость обработки массива. Я для того, чтоб заменить asort(), чтоб ф-ция не переставляла элементы с одинаковыми ключами, тренировался на двумерном массиве размером ~70000 элементов На моем компе он сортируется asort() за 0.9 секундl, а массив в 560000 элементов asort() сортирует за 9 секунд. Это и было ориентиром. Функцию написать можно, но получить ее производительность такую же как у asort() программируя на Harbour не получится.
|
|
|
|