Форум » [x]Harbour » Подскажите с сортировкой массива » Ответить

Подскажите с сортировкой массива

Dima: [pre2] 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 [/pre2] Нужно что бы массив был отсортирован в следующем порядке 10_2012 11_2012 12_2012 01_2013 02_2013 что то делал когда то и забыл как ;)

Ответов - 3

Vladimir: Вариант: [pre2]... asort(ams,,,{|x,y| (substr(x,4,4)+left(x,2))<(substr(y,4,4)+left(y,2))}) ... [/pre2] Выдаёт: 10_2012 11_2012 12_2012 01_2013 02_2013

Dima: 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

subbota: Решения для выхода из положения конечно можно найти и не одно. Однако при этом существенно замедляется скорость обработки массива. Я для того, чтоб заменить asort(), чтоб ф-ция не переставляла элементы с одинаковыми ключами, тренировался на двумерном массиве размером ~70000 элементов На моем компе он сортируется asort() за 0.9 секундl, а массив в 560000 элементов asort() сортирует за 9 секунд. Это и было ориентиром. Функцию написать можно, но получить ее производительность такую же как у asort() программируя на Harbour не получится.




полная версия страницы