Ordenar un diccionario de secuencias de comandos que se rellena con datos de cadena

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Resumen

Un objeto Dictionary Scripting es el equivalente de una matriz asociativa de PERL, donde se almacena información en una matriz formada por las claves únicas y datos de elemento. Dado que esta información se almacena sin ordenar, la enumeración a través de la matriz devuelve información en el orden en que se almacenó. El propósito de este artículo es definir la función SortDictionary() que ordena el contenido de un objeto de diccionario que se rellena con datos de cadena por clave o elemento.

Más información

El ejemplo de código siguiente define dos constantes, dictKey y dictItem, que son utilizados por la función SortDictionary() . La función SortDictionary() toma dos parámetros, un objeto creado previamente como un diccionario de secuencias de comandos y una de las constantes para determinar si debe ordenar por claves o los elementos del diccionario.

Const dictKey  = 1Const dictItem = 2

Function SortDictionary(objDict,intSort)
' declare our variables
Dim strDict()
Dim objKey
Dim strKey,strItem
Dim X,Y,Z

' get the dictionary count
Z = objDict.Count

' we need more than one item to warrant sorting
If Z > 1 Then
' create an array to store dictionary information
ReDim strDict(Z,2)
X = 0
' populate the string array
For Each objKey In objDict
strDict(X,dictKey) = CStr(objKey)
strDict(X,dictItem) = CStr(objDict(objKey))
X = X + 1
Next

' perform a a shell sort of the string array
For X = 0 to (Z - 2)
For Y = X to (Z - 1)
If StrComp(strDict(X,intSort),strDict(Y,intSort),vbTextCompare) > 0 Then
strKey = strDict(X,dictKey)
strItem = strDict(X,dictItem)
strDict(X,dictKey) = strDict(Y,dictKey)
strDict(X,dictItem) = strDict(Y,dictItem)
strDict(Y,dictKey) = strKey
strDict(Y,dictItem) = strItem
End If
Next
Next

' erase the contents of the dictionary object
objDict.RemoveAll

' repopulate the dictionary with the sorted information
For X = 0 to (Z - 1)
objDict.Add strDict(X,dictKey), strDict(X,dictItem)
Next

End If

End Function

Un ejemplo de trabajo

En el ejemplo siguiente se utiliza la función anterior.

Nota: Se han quitado todos los comentarios de la función de ordenación real en este ejemplo.


Copie el siguiente código ASP y guárdelo en una carpeta como Sortdemo.asp con al menos secuencias de comandos de acceso:
<%@LANGUAGE="VBSCRIPT"%><% Option Explicit %>
<html>
<head><title>Dictionary Sorting</title></head>
<body>
<%

Dim d, i

Const dictKey = 1
Const dictItem = 2

Set d = Server.CreateObject("Scripting.Dictionary")

d.Add "3", "Delta"
d.Add "1", "Foxtrot"
d.Add "4", "Bravo"
d.Add "2", "Echo"
d.Add "6", "Alpha"
d.Add "5", "Charlie"

Response.Write "<p>Before Sorting:<br>"
For Each i In d
Response.Write i & "=" & d(i) & "<br>"
Next

Response.Write "<p>By Key:<br>"
SortDictionary d,dictKey
For Each i In d
Response.Write i & "=" & d(i) & "<br>"
Next

Response.Write "<p>By Item:<br>"
SortDictionary d,dictItem
For Each i In d
Response.Write d(i) & "=" & i & "<br>"
Next
%>
</body>
</html>
<%
Function SortDictionary(objDict,intSort)
Dim strDict()
Dim objKey
Dim strKey,strItem
Dim X,Y,Z
Z = objDict.Count
If Z > 1 Then
ReDim strDict(Z,2)
X = 0
For Each objKey In objDict
strDict(X,dictKey) = CStr(objKey)
strDict(X,dictItem) = CStr(objDict(objKey))
X = X + 1
Next
For X = 0 to (Z - 2)
For Y = X to (Z - 1)
If StrComp(strDict(X,intSort),strDict(Y,intSort),vbTextCompare) > 0 Then
strKey = strDict(X,dictKey)
strItem = strDict(X,dictItem)
strDict(X,dictKey) = strDict(Y,dictKey)
strDict(X,dictItem) = strDict(Y,dictItem)
strDict(Y,dictKey) = strKey
strDict(Y,dictItem) = strItem
End If
Next
Next
objDict.RemoveAll
For X = 0 to (Z - 1)
objDict.Add strDict(X,dictKey), strDict(X,dictItem)
Next
End If
End Function
%>

Al explorar, debería aparecer el siguiente resultado:
Before Sorting:3=Delta
1=Foxtrot
4=Bravo
2=Echo
6=Alpha
5=Charlie

By Key:
1=Foxtrot
2=Echo
3=Delta
4=Bravo
5=Charlie
6=Alpha

By Item:
Alpha=6
Bravo=4
Charlie=5
Delta=3
Echo=2
Foxtrot=1


Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita, a las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Para obtener más información acerca de las opciones de soporte que están disponibles y cómo ponerse en contacto con Microsoft, visite el siguiente sitio Web de Microsoft:

Referencias

Para obtener más información sobre tecnologías de secuencias de comandos de Microsoft, consulte el sitio Web de Microsoft Developer Network en la dirección URL siguiente:
Propiedades

Id. de artículo: 246067 - Última revisión: 8 ene. 2017 - Revisión: 1

Comentarios