Associative Arrays: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
An associative array differs from a “normal” array in one major way: rather than being indexed numerically (i.e. 0, 1, 2, 3, …), it is indexed by a key, or a language-like word. | An associative array differs from a “normal” array in one major way: rather than being indexed numerically (i.e. 0, 1, 2, 3, …), it is indexed by a key, or a language-like word. | ||
A Scripting.Dictionary is a standard object provided by the Microsoft ScripTing Runtime (scrrun.dll) dependency and is commonly used in VBScript, a reference to which needs to be added in order to create an object in your AutoIt project. | A Scripting.Dictionary is a standard object provided by the Microsoft ScripTing Runtime (scrrun.dll) dependency and is commonly used in VBScript, a reference to which needs to be added in order to create an object in your AutoIt project. | ||
<br /> | <br /><br /> | ||
A dictionary object example by [https://www.autoitscript.com/forum/profile/2709-mhz/ MHz] | A dictionary object example by [https://www.autoitscript.com/forum/profile/2709-mhz/ MHz] | ||
<syntaxhighlight lang='autoit'> | <syntaxhighlight lang='autoit'> | ||
; Author Mhz | |||
; Forum | |||
Global $vKey, $sItem, $sMsg, $oDictionary | Global $vKey, $sItem, $sMsg, $oDictionary | ||
Line 60: | Line 63: | ||
Next | Next | ||
EndIf | EndIf | ||
</syntaxhighlight> | |||
<br /> | |||
<br /> | |||
The original AutoIt Scripting Dictionary implementation appears to have been by Gary Frost as far back as 2007. It has since been modified to the following: | |||
<br /> | |||
<syntaxhighlight lang='autoit'> | |||
#cs | |||
Scripting Dictionary UDF | |||
Made by GaryFrost <https://www.autoitscript.com/forum/topic/47048-scripting-dictionary/> | |||
Modified by Jefrey <jefrey[at]jefrey.ml> | |||
Forum https://www.autoitscript.com/forum/topic/182334-scripting-dictionary-modified/ | |||
#ce | |||
Func _InitDictionary() | |||
Return ObjCreate("Scripting.Dictionary") | |||
EndFunc ;==>_InitDictionary | |||
; Adds a key and item pair to a Dictionary object. | |||
Func _AddItem($oDictionary, $v_key, $v_item) | |||
$oDictionary.ADD($v_key, $v_item) | |||
If @error Then Return SetError(1, 1, -1) | |||
EndFunc ;==>_AddItem | |||
; Returns true if a specified key exists in the Dictionary object, false if it does not. | |||
Func _ItemExists($oDictionary, $v_key) | |||
Return $oDictionary.Exists($v_key) | |||
EndFunc ;==>_ItemExists | |||
; Returns an item for a specified key in a Dictionary object | |||
Func _Item($oDictionary, $v_key) | |||
Return $oDictionary.Item($v_key) | |||
EndFunc ;==>_Item | |||
; Sets an item for a specified key in a Dictionary object | |||
Func _ChangeItem($oDictionary, $v_key, $v_item) | |||
$oDictionary.Item($v_key) = $v_item | |||
EndFunc ;==>_ChangeItem | |||
; Sets a key in a Dictionary object. | |||
Func _ChangeKey($oDictionary, $v_key, $v_newKey) | |||
$oDictionary.Key($v_key) = $v_newKey | |||
EndFunc ;==>_ChangeKey | |||
; Removes a key, item pair from a Dictionary object. | |||
Func _ItemRemove($oDictionary, $v_key) | |||
$oDictionary.Remove($v_key) | |||
If @error Then Return SetError(1, 1, -1) | |||
EndFunc ;==>_ItemRemove | |||
; Returns the number of items in a collection or Dictionary object. | |||
Func _ItemCount($oDictionary) | |||
Return $oDictionary.Count | |||
EndFunc ;==>_ItemCount | |||
; Returns an array containing all the items in a Dictionary object | |||
Func _GetItems($oDictionary) | |||
Return $oDictionary.Items | |||
EndFunc ;==>_GetItems | |||
Func _Clear($oDictionary) | |||
Return $oDictionary.RemoveAll | |||
EndFunc | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 10:24, 28 November 2017
In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection.
An associative array differs from a “normal” array in one major way: rather than being indexed numerically (i.e. 0, 1, 2, 3, …), it is indexed by a key, or a language-like word.
A Scripting.Dictionary is a standard object provided by the Microsoft ScripTing Runtime (scrrun.dll) dependency and is commonly used in VBScript, a reference to which needs to be added in order to create an object in your AutoIt project.
A dictionary object example by MHz
; Author Mhz
; Forum
Global $vKey, $sItem, $sMsg, $oDictionary
; Create dictionary object
$oDictionary = ObjCreate("Scripting.Dictionary")
If @error Then
MsgBox(0, '', 'Error creating the dictionary object')
Else
; Add keys with items
$oDictionary.Add ("One", "Same" )
$oDictionary.Add ("Two", "Car" )
$oDictionary.Add ("Three", "House" )
$oDictionary.Add ("Four", "Boat" )
If $oDictionary.Exists('One') Then
; Display item
MsgBox(0x0, 'Item One', $oDictionary.Item('One'), 2)
; Set an item
$oDictionary.Item('One') = 'Changed'
; Display item
MsgBox(0x20, 'Did Item One Change?', $oDictionary.Item('One'), 3)
; Remove key
$oDictionary.Remove('One')
;
$oDictionary.Key ('Two') = 'Bike'
EndIf
Sleep(1000)
; Store items into a variable
For $vKey In $oDictionary
$sItem &= $oDictionary.Item($vKey) & @CRLF
Next
; Display items
MsgBox(0x0, 'Items Count: ' & $oDictionary.Count, $sItem, 3)
; Add items into an array
$aItems = $oDictionary.Items
; Display items in the array
For $i = 0 To $oDictionary.Count -1
MsgBox(0x0, 'Items [ ' & $i & ' ]', $aItems[$i], 2)
Next
Sleep(1000)
; Add keys into an array
$aKeys = $oDictionary.Keys
; Display keys in the array
For $i = 0 To $oDictionary.Count -1
MsgBox(0x0, 'Keys [ ' & $i & ' ]', $aKeys[$i], 2)
Next
EndIf
The original AutoIt Scripting Dictionary implementation appears to have been by Gary Frost as far back as 2007. It has since been modified to the following:
#cs
Scripting Dictionary UDF
Made by GaryFrost <https://www.autoitscript.com/forum/topic/47048-scripting-dictionary/>
Modified by Jefrey <jefrey[at]jefrey.ml>
Forum https://www.autoitscript.com/forum/topic/182334-scripting-dictionary-modified/
#ce
Func _InitDictionary()
Return ObjCreate("Scripting.Dictionary")
EndFunc ;==>_InitDictionary
; Adds a key and item pair to a Dictionary object.
Func _AddItem($oDictionary, $v_key, $v_item)
$oDictionary.ADD($v_key, $v_item)
If @error Then Return SetError(1, 1, -1)
EndFunc ;==>_AddItem
; Returns true if a specified key exists in the Dictionary object, false if it does not.
Func _ItemExists($oDictionary, $v_key)
Return $oDictionary.Exists($v_key)
EndFunc ;==>_ItemExists
; Returns an item for a specified key in a Dictionary object
Func _Item($oDictionary, $v_key)
Return $oDictionary.Item($v_key)
EndFunc ;==>_Item
; Sets an item for a specified key in a Dictionary object
Func _ChangeItem($oDictionary, $v_key, $v_item)
$oDictionary.Item($v_key) = $v_item
EndFunc ;==>_ChangeItem
; Sets a key in a Dictionary object.
Func _ChangeKey($oDictionary, $v_key, $v_newKey)
$oDictionary.Key($v_key) = $v_newKey
EndFunc ;==>_ChangeKey
; Removes a key, item pair from a Dictionary object.
Func _ItemRemove($oDictionary, $v_key)
$oDictionary.Remove($v_key)
If @error Then Return SetError(1, 1, -1)
EndFunc ;==>_ItemRemove
; Returns the number of items in a collection or Dictionary object.
Func _ItemCount($oDictionary)
Return $oDictionary.Count
EndFunc ;==>_ItemCount
; Returns an array containing all the items in a Dictionary object
Func _GetItems($oDictionary)
Return $oDictionary.Items
EndFunc ;==>_GetItems
Func _Clear($oDictionary)
Return $oDictionary.RemoveAll
EndFunc