Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


объект: "Scripting.Dictionary" - Сортировка данных в словаре
Использование:
SortDictionary($objDict, flag)
$objDict - словарь (как объект)
flag - 0 сортировка по ключам(key); 1 сортировка по элементам(item)
Код: Выделить весь код
$Dict = ObjCreate("Scripting.Dictionary")

;~ Наполняем словарь неотсортированными данными:
$Dict.Add ("3", "Delta")
$Dict.Add ("1", "Foxtrot")
$Dict.Add ("4", "Bravo")
$Dict.Add ("2", "Echo")
$Dict.Add ("6", "Alpha")
$Dict.Add ("5", "Charlie")

;~ Сортировка:
SortDictionary($Dict, 0)

;~ Просмотр результатов сортировки:
For $o In $Dict
	MsgBox(0+262144 ,$o, $Dict($o) )
Next

;~ Эта функция основана на:
;~ http://support.microsoft.com/support/kb/articles/q246/0/67.asp
Func SortDictionary(ByRef $objDict, $intSort=0)
	Local Const $dictKey  = 0
	Local Const $dictItem = 1
	Local $strDict[1]
	Local $objKey
	Local $strKey, $strItem
	Local $intCount, $i, $j
	$intCount = $objDict.Count
	If $intCount > 1 Then
		ReDim $strDict[$intCount][2]
		$i = 0
		For $objKey In $objDict
			$strDict[$i][$dictKey]  = String($objKey)
			$strDict[$i][$dictItem] = String($objDict($objKey))
			$i = $i + 1
		Next
		For $i = 0 To $intCount-2
			For $j = $i To $intCount-1
				If StringCompare($strDict[$i][$intSort], $strDict[$j][$intSort]) > 0 Then
					$strKey  = $strDict[$i][$dictKey]
					$strItem = $strDict[$i][$dictItem]
					$strDict[$i][$dictKey]  = $strDict[$j][$dictKey]
					$strDict[$i][$dictItem] = $strDict[$j][$dictItem]
					$strDict[$j][$dictKey]  = $strKey
					$strDict[$j][$dictItem] = $strItem
				EndIf
			Next
		Next
		$objDict.RemoveAll
		For $i = 0 To $intCount-1
		$objDict.Add ($strDict[$i][$dictKey], $strDict[$i][$dictItem])
		Next
	EndIf
EndFunc
P.S. "Scripting.Dictionary" имеет свойства и методы которые делают его функциональней обычных массивов, плюс простота использования и высокая скорость обработки. А с этой функцией сортировки, словарь может стать серьёзным конкурентом для одномерных массивов.
Для тех кто не знаком с принципами работы этого объекта, есть хорошая ссылка, котрую дал мне Creat0R :http://www.autoitscript.com/forum/in...56?entry352256
Также, описание свойств и методов можно найти на MSDN.


Отправлено: 23:45, 19-06-2007 | #43