2010-06-11 9 views

Respuesta

3

Crear un nuevo objeto Dictionary, iterar a través de las teclas en el diccionario original y agrega estas claves y los valores correspondientes al nuevo diccionario, como esto:

Function CloneDictionary(Dict) 
    Dim newDict 
    Set newDict = CreateObject("Scripting.Dictionary") 

    For Each key in Dict.Keys 
    newDict.Add key, Dict(key) 
    Next 
    newDict.CompareMode = Dict.CompareMode 

    Set CloneDictionary = newDict 
End Function 

Esto debería ser suficiente en la mayoría de los casos. Sin embargo, si su diccionario original contiene objetos, deberá implementar la clonación profunda, es decir, clonar estos objetos también.

+0

Sí, eso es cierto ... pero ¿hay alguna función integrada para realizar clonación profunda –

-1

Eche un vistazo a la respuesta aceptada en VBScript: How to utiliize a dictionary object returned from a function?. Podría ser una solución si una referencia es todo lo que se está buscando.

Editar De acuerdo con el comentario de Ekkehard.Horner, ahora entiendo que esto es no clonación, pero puede ayudar a otros que están buscando solamente una referencia al objeto original.

+1

Los diccionarios son objetos y pasan objetos a Subs/Funciones/Métodos (incluso con ByVal), asigna objetos a valores y devuelve objetos desde Funciones/Método (con suerte con Set) * siempre * tratará con referencias y nunca clonará/copiará/creará un nuevo objeto. Por lo tanto, borre su respuesta errónea/errónea. –

Cuestiones relacionadas