Что нового

[Массивы] Сортировка массива с датами

111RAZOR111

Новичок
Сообщения
4
Репутация
0
Дан массив дат вида dd.mm.yy, нужно отсортировать их в порядке возрастания/убывания. Подскажите пожалуйста как это реализовать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
111RAZOR111,
Попробуйте так.
Код:
#include <Array.au3>

Dim $aDate[21] = [20]

For $i = 1 To $aDate[0]
	;format dd.mm.yy
	$aDate[$i] = StringFormat('%02d.%02d.%02d', Random(1, 28, 1), Random(1, 12, 1), Random(1, 12, 1))
Next
_ArrayDisplay($aDate)

Dim $aTemp[$aDate[0] + 1][2] = [[$aDate[0]]]
For $i = 1 To $aDate[0]
	$aTemp[$i][0] = $aDate[$i]
	$aTemp[$i][1] = Number(StringRegExpReplace($aTemp[$i][0], '^(\d{2})\.(\d{2})\.(\d{2})$', '$3$2$1'))
Next
;_ArrayDisplay($aTemp)
_ArraySort($aTemp, 0, 1, 0, 1)
;_ArrayDisplay($aTemp)
For $i = 1 To $aDate[0]
	$aDate[$i] = $aTemp[$i][0]
Next
_ArrayDisplay($aDate)
 
Автор
111RAZOR111

111RAZOR111

Новичок
Сообщения
4
Репутация
0
Спасибо, а в виде функции можно реализовать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Array.au3>

$aArr = StringSplit('24.06.2012|22.06.2001|21.07.2001|28.04.1982', '|')

_ArraySortEx($aArr, 0, 1)
_ArrayDisplay($aArr)

Func _ArraySortEx(ByRef $aArray, $iDesc = 0, $iStart = 0)
	For $i = $iStart To UBound($aArray)-1
		$aArray[$i] = StringRegExpReplace($aArray[$i], "(\d+)\.(\d+)\.(\d+)", "\3.\2.\1")
	Next
	
	_ArraySort($aArray, $iDesc, $iStart)
	
	For $i = $iStart To UBound($aArray)-1
		$aArray[$i] = StringRegExpReplace($aArray[$i], "(\d+)\.(\d+)\.(\d+)", "\3.\2.\1")
	Next
EndFunc
 
Верх