2012-05-23 3 views
2

Простой пример:Как добавить словарь в массив

Dim d, a(0) 
Set d = CreateObject("Scripting.Dictionary") 
d.Add "a", "Athens" 
d.Add "b", "Belgrade" 
d.Add "c", "Cairo" 
Set a(0) = d 

WScript.Echo(TypeName(a)) 

Выход:

Variant()

Я не вижу способа, как получить доступ к этому объекту, он считает 3, но, кажется, как пустой

Удивительно, что Google не перечисляет полезный результат для этого вопроса - как назначить словарь в массиве?

Ближайший я нашел это без ответа link

Моя проблема заключается в том, что у меня есть цикл, который создает временный словарь, который я планировал кормить в простом одномерном массиве с словарных объектов, но без успеха

I также нашел что-то вроде этого link, где два массива создаются для ключей словаря и для предметов словаря (значений) отдельно, что слишком сложно для моего дела

Так что это вообще возможно с VBScript?

ответ

3

я мог бы неправильно ваш вопрос, но вы можете получить доступ к Dictionary так:

WScript.Echo(a(0).Item("b")) 

Редактировать

Этот код:

Dim d, a(0) 
Set d = CreateObject("Scripting.Dictionary") 
d.Add "a", "Athens" 
d.Add "b", "Belgrade" 
d.Add "c", "Cairo" 
Set a(0) = d 
WScript.Echo(a(0).Item("b")) 

dim x 
x = d.Items 

dim i 
for i = lbound(x) to ubound(x) 
    WScript.Echo(x(i)) 
next 

Производит этот вывод на моем Windows, 7:

C:\>cscript test.vbs 
Microsoft (R) Windows Script Host Version 5.8 
Copyright (C) Microsoft Corporation. All rights reserved. 

Belgrade 
Athens 
Belgrade 
Cairo 

C:\> 
+0

Так же, как я хотел, но, к сожалению, он выдает ошибку: 'Тип mismatch' – theta

+0

я добавил полный пример, который включает в себя номера версий, какая версия VBScript вы используете? –

+0

К сожалению, это была опечатка на моем конце (мой диктовал был 'd', и я только что вставил ваш ответ). Он отлично работает, спасибо – theta

0

Пример:

Dim d 
Set d = CreateObject("Scripting.Dictionary") 
d.Add "a", "Athens" 
d.Add "b", "Belgrade" 
d.Add "c", "Cairo" 

WScript.Echo(d("a")) '=> Athens 

d("a") = "Brussels" 

WScript.Echo(d("a")) '=> Brussels 

a = d.Keys ' Get the keys. 
b = d.Items 
For i = 0 To d.Count -1 ' Iterate the array. 
    wscript.echo a(i) & " " & b(i) 
Next 


'=>a Brussels 
'=>b Belgrade 
'=>c Cairo 
+0

Да, но разделяющие ключи/элементы в отдельных массивах усложняют бит при использовании цикла и dict имеют переменные ключи. В простом примере это, конечно, понятно. Спасибо, ребята, я нашел проблему, с которой я столкнулся с вашими ответами - если цикл по temp dict и присвоение его массиву, dict должен быть уничтожен после добавления его в массив, а объект Dictionary снова воссоздан. Вместо этого я использовал 'dict.RemoveAll' и попал в эту проблему. ура – theta

Смежные вопросы