Что нового

Сделать хитрую сортировку двух массивов

Suppir

Продвинутый
Сообщения
967
Репутация
62
Есть массив $ini вида:
txt
au3
rtf
doc

Есть массив $data вида:
1.txt
1.rtf
text.doc
записка.doc
proga.au3
prikaz.pdf
prikaz.txt

Необходимо отсортировать массив $data таким образом, чтобы очередность его элементов совпадала с очередностью аналогичных элементов в массиве $ini. Т.е. в массиве $data сначала должны идти txt-файлы, потом au3-файлы, потом rtf-файлы, помто doc, а потом все остальные (по алфавиту).
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Suppir
Напоминает rarfiles.lst... :smile:

А если несколько *.txt, то они должны по алфавиту упорядочиваться или без сортировки?
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Если несколько файлов одного типа, то они по алфавиту упорядочиваются.

В идеале должна быть вот такая функция:

$aSorted = SmartSort($data, $ini)

буду вечно благодарен :-[
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Suppir
Не финальный релиз, но основная идея моего варианта...
Если понравится, можно будет продолжить усовершенствование...
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Супер! Отличный скрипт!


Добавлено:
Сообщение автоматически объединено:

В принципе, это верное решение - сделать предварительную сортировку $data.
 

madmasles

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

Local $aData[11] = [11, "1.txt", "1.rtf", "text.doc", "записка.doc", "proga.au3", "prikaz.pdf", "prikaz.txt", _
"atest.au3", "doc.pdf", "test.txt"]
Local $aIni[6] = [6, "txt", "rtf", "doc", "au3", "pdf"]

Dim $aSorted[1]
_ArraySort($aData, 0, 1)
For $i = 1 To UBound($aIni) - 1
	For $j = 1 To UBound($aData) - 1
		If StringInStr($aData[$j], "." & $aIni[$i]) <> 0 Then
			_ArrayAdd($aSorted, $aData[$j])
			$aSorted[0] += 1
		EndIf
	Next

Next
_ArrayDisplay($aSorted)
Но если функцию делать, то, наверное, надо массивы на валидность проверять.
 
Верх