forked from Ixiko/AHK-libs-and-classes-collection
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClass_Dictionary.ahk
277 lines (240 loc) · 8.5 KB
/
Class_Dictionary.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
/*
Dictionary CLASS
Link: https://msdn.microsoft.com/en-us/library/x4k5wbx4.
Descripción:
Un objeto Dictionary es el equivalente de un 'array' asociativo de PERL.
Los elementos pueden ser cualquier forma de datos y se almacenan en el 'array'.
Cada elemento está asociado con una clave única.
La clave se utiliza para recuperar un elemento individual y suele ser un número entero o una cadena, pero puede ser cualquier cosa excepto un 'array'.
Notas:
Por defecto, Los nombres de las claves distinguen entre mayúsculas y minúsculas, por lo que 'KeyA' no es igual a 'KEYA". Esto se puede cambiar mediante la propiedad 'CompareMode'.
Las claves conservar el orden en que fueron añadidas.
Los métodos InsertAt() y RemoveAt() son muy lentos. Considere usar Remove(Key).
*/
Class Dictionary
{
; ===================================================================================================================
; INSTANCE VARIABLES
; ===================================================================================================================
oDictionary := 0
; ===================================================================================================================
; CONSTRUCTOR
; ===================================================================================================================
/*
Parámetros:
KeyValues: las claves con sus respectivos valores iniciales en el objeto Dictionary.
Parámetro 1: La clave asociada al elemento que se agrega.
Parámetro 2: El elemento asociado con la clave a añadir. Se repite el mismo orden en los siguientes parámetros.
*/
__New(KeysValues*)
{
Try
this.oDictionary := ComObjCreate("Scripting.Dictionary")
Catch
Return (FALSE)
Loop(KeysValues.MaxIndex())
If (Mod(A_Index, 2) == 0)
this.oDictionary.Add(Key, KeysValues[A_Index])
Else
Key := KeysValues[A_Index]
if (Mod(KeysValues.MaxIndex(), 2) == 1)
this.oDictionary.Add(KeysValues[KeysValues.MaxIndex()], "")
}
; ===================================================================================================================
; DESTRUCTOR
; ===================================================================================================================
__Delete()
{
this.oDictionary := 0
}
; ===================================================================================================================
; META-FUNCTIONS
; ===================================================================================================================
__Get(KeyName)
{
If (KeyName != "Count" && KeyName != "CompareMode" && KeyName != "Keys" && KeyName != "Items")
{
If (this.oDictionary.Exists(KeyName))
Return (this.oDictionary.Item(KeyName))
Else
Return ("")
}
}
__Set(KeyName, Value)
{
If (KeyName != "Count" && KeyName != "CompareMode" && KeyName != "Keys" && KeyName != "Items")
{
this.oDictionary.Item(KeyName) := Value
}
}
; ===================================================================================================================
; PUBLIC METHODS
; ===================================================================================================================
/*
Agrega claves con sus valores al final de este objeto Dictionary.
Parámetros:
KeysValues: claves a añadir al objeto con sus respectivos valores.
Parámetro 1: La clave asociada al elemento que se agrega.
Parámetro 2: El elemento asociado con la clave a añadir. Se repite el mismo orden en los siguientes parámetros.
*/
Push(KeysValues*) {
Loop(KeysValues.MaxIndex())
If (Mod(A_Index, 2) == 0)
this.oDictionary.Add(Key, KeysValues[A_Index])
Else Key := KeysValues[A_Index]
if (Mod(KeysValues.MaxIndex(), 2) == 1)
this.oDictionary.Add(KeysValues[KeysValues.MaxIndex()], "")
} ;https://msdn.microsoft.com/en-us/library/5h92h863
/*
Elimina la última clave en este objeto Dictionary.
*/
Pop() {
this.RemoveAt(this.Count)
}
/*
Añade una clave en la posición espesificada de este objeto Dictionary.
Parámetros:
Pos: Posición en la que añadir el elemento.
KeyName: La clave asociada al elemento que se agrega.
Value: El elemento asociado con la clave a añadir.
*/
InsertAt(Pos, KeyName, Value := "") {
oDictionary := ComObjCreate("Scripting.Dictionary")
For KeyName2 in this.oDictionary.Keys()
{
If (A_Index == Pos)
oDictionary.Add(KeyName, Value)
oDictionary.Add(KeyName2, this.oDictionary.Item(KeyName2))
}
this.oDictionary := oDictionary
}
/*
Elimina una clave en este objeto Dictionary.
Parámetros:
KeyName: El nombre de la clave a remover en este objeto Dictionary.
*/
Remove(KeyName) {
this.oDictionary.Remove(KeyName)
} ;https://msdn.microsoft.com/en-us/library/ywyayk03
/*
Elimina todas las claves en este objeto Dictionary.
*/
RemoveAll()
{
this.oDictionary.RemoveAll()
} ;https://msdn.microsoft.com/en-us/library/45731e2w
/*
Relimina las claves desde la posición espesificada hasta tantas posiciónes siguientes espesificadas en este objeto Dictionary.
Parámetros:
Pos: La posición del primer elemento a eliminar.
Length: La cantidad de posiciónes a eliminar a partir de Pos. Por defecto es 1, lo que quiere decir que solo elimina el elemento espesificado en Pos.
*/
RemoveAt(Pos, Length := 1) {
PosM := Pos + Length
For KeyName in this.oDictionary.Keys()
{
If (A_Index == PosM)
Break
If (A_Index >= Pos)
this.oDictionary.Remove(KeyName)
}
}
/*
Establece / Renombra una clave en este objeto Dictionary.
Parámetros:
KeyName: El nombre de la clave a renombrar en este objeto Dictionary.
NewKeyName: El nuevo nombre de la clave en este objeto Dictionary.
*/
Rename(KeyName, NewKeyName)
{
this.oDictionary.Key(KeyName) := NewKeyName
}
/*
Recupera o establece el elemento asociado con la clave espesificada en este objeto Dictionary.
Parámetros:
KeyName: El nombre de la clave en este objeto Dictionary.
NewValue: Opcional. El nuevo elemento asociado con la clave espesificada.
*/
Item(KeyName, NewValue*)
{
If (NewValue.MaxIndex() == "")
Return (this.oDictionary.Exists(KeyName) ? this.oDictionary.Item(KeyName) : "")
Else
this.oDictionary.Item(KeyName) := NewValue[1]
}
/*
Comprueba si existe una clave especificada en este objeto Dictionary.
Parámetros:
KeyName: El nombre de la clave a comprobar su existencia en este objeto Dictionary.
Return: 0 = La clave no existe. 1 = La clave existe.
*/
HasKey(KeyName) {
Return (this.oDictionary.Exists(KeyName) ? TRUE : FALSE)
} ;https://msdn.microsoft.com/en-us/library/57hdf10z
/*
Devuelve una copia exacta de este objeto Dictionary.
Return: devuelve un nuevo objeto Dictionary con los mismos elementos que este objeto Dictionary.
*/
Clone()
{
oCloneDictionary := new Dictionary()
oCloneDictionary.oDictionary.CompareMode := this.oDictionary.CompareMode
For KeyName in this.oDictionary.Keys()
oCloneDictionary.oDictionary.Add(KeyName, this.oDictionary.Item(KeyName))
Return (oCloneDictionary)
}
; ===================================================================================================================
; PROPERTIES
; ===================================================================================================================
/*
Devuelve el número de claves en el objeto Dictionary.
*/
Count[]
{
Get
{
return this.oDictionary.Count
}
} ;https://msdn.microsoft.com/en-us/library/5t9h9579
/*
Devuelve un 'array' que contiene todas las claves de este objeto Dictionary.
Modo de uso: For KeyName in oDictionary.Keys.
*/
Keys[]
{
Get
{
Return (this.oDictionary.Keys())
}
} ;https://msdn.microsoft.com/en-us/library/8aet97f2
/*
Devuelve un 'array' que contiene todos los elementos de este objeto Dictionary.
Modo de uso: For Value in oDictionary.Items.
*/
Items[]
{
Get
{
Return (this.oDictionary.Items())
}
} ;https://msdn.microsoft.com/en-us/library/8aet97f2
/*
Establece y devuelve el modo de comparación para comparar las claves de cadena en este objeto Dictionary.
CompareMode debe ser uno de los siguientes valores:
0 = Comparación binaria.
1 = Comparación de texto.
2 = Comparación de base de datos.
N = Pueden utilizarse valores superiores a 2 para referirse a comparaciones utilizando ID de localización específicos (LCID).
*/
CompareMode[]
{
Get
{
Return (this.oDictionary.CompareMode)
}
Set
{
this.oDictionary.CompareMode := Value
}
} ;https://msdn.microsoft.com/en-us/library/a14xez73
}