2016-02-12 74 views
3

我想将多个字符串添加到VBScript中的多维数组中。我希望我可以用简短的方式解释它: 每个字符串都包含一些用逗号分隔的数据。现在我想将所有这些数据添加到数组中,每个字符串都有一个维度。多维数组中的多个字符串vbscript

例如

Dates = "12.02.2016, 13.08.2017, 19.05.2018" 
Temperatures = "23.1, 24.9, 75.3" 
Humidity = "26, 29, 95" 

这是没有问题的,通过使用

AmbientConditionsArray = Split(Dates, ", ") 

让每一个字符串转换成一个维数组,但我真的不知道把它变成一个二维数组一样

AmbientConditionsArray(0,0) = Date1 
AmbientConditionsArray(0,1) = Temperature1 
AmbientConditionsArray(0,2) = Humidity1 
AmbientConditionsArray(1,0) = Date2 
AmbientConditionsArray(1,1) = Temperature2 
AmbientConditionsArray(1,2) = Humidity2 

等等。

回答

3

虽然您可以使用多维数组,但它会比较麻烦。

如何简单地使用三个独立的常规数组?

Dates = Split("12.02.2016, 13.08.2017, 19.05.2018", ", ") 
Temperatures = Split("23.1, 24.9, 75.3", ", ") 
Humidity = Split("26, 29, 95", ", ") 

与他们一起作为一个值块我会用字典。

Dim AmbientConditions 
Set AmbientConditions = CreateObject("Scripting.Dictionary") 

AmbientConditions.Add "Dates", Split("12.02.2016, 13.08.2017, 19.05.2018", ", ") 
AmbientConditions.Add "Temperatures", Split("23.1, 24.9, 75.3", ", ") 
AmbientConditions.Add "Humidity", Split("26, 29, 95", ", ") 

之后,您可以以可读的方式访问单个值:

MsgBox AmbientConditions("Humidity")(1) 
' -> shows "29" 
+2

工程很棒。非常感谢。没有想出字典的想法... –

+1

不错的解决方案,打算发布一个多数组,但这是整洁。 – Lankymart

1

以形成在这里你的代码是什么可以做;这是一个真正的多维数组。 [代码被编辑因为对我而言稍有疏忽]

Dates = Split("12.02.2016, 13.08.2017, 19.05.2018", ", ") 
Temperatures = Split("23.1, 24.9, 75.3", ", ") 
Humidity = Split("26, 29, 95", ", ") 

Dim AmbientConditionsArray() 
ReDim AmbientConditionsArray(2,UBound(Dates)) 
For i = 0 TO UBound(Dates) 
    AmbientConditionsArray(0,I) = Dates(I) 
    AmbientConditionsArray(0,I) = Temperatures(I) 
    AmbientConditionsArray(0,I) = Humidity(I) 
Next 

现在所有的数据被整齐地存放在一个多维数组。

这第二个模型接近第一个答案,但我认为它也符合您的陈述需求。 [它使用嵌套数组来满足混合多维数组的目的]

Dates = Split("12.02.2016, 13.08.2017, 19.05.2018", ", ") 
Temperatures = Split("23.1, 24.9, 75.3", ", ") 
Humidity = Split("26, 29, 95", ", ") 

Dim AmbientConditions 

AmbientConditions = Array(Dates, Temperatures, Humidity) 

For I = 0 To UBound(Dates) 
    Debug.Print AmbientConditions(0)(I), AmbientConditions(1)(I), AmbientConditions(2)(I) 
Next 
+2

在这种情况下,我会建议使用Const Const_DATE = 0(等)来增加代码的可读性:'AmbientConditions(COND_DATE)(i)'。我使用多维数组时遇到的最大问题(除了刚刚定义的不灵活性之外)是,它们产生的代码很难用所有这些数字索引来读取。 – Tomalak

+0

这不是一个*“多维数组”*它是一个包含嵌套单维数组的单维数组。影响@ Tomalak的方法使用'Array()'而不是'Scripting.Dictionary'的副本。 – Lankymart

+0

@Lankymart我在“真正的”多维方法之后提供了混合方法。你应该看到,你想要切片的方式就在那里@ @ Tomalak我喜欢你的洞察力,这非常有意义:) – CoveGeek

2

@Tomalak'sanswer是这样做的一个非常简洁的方式,但如果你确实想要一个本地多维数组的方式接近你原来的要求你使用动态数组,就像这样。

Option Explicit 

'Named constants for the three dimensions 
Const COND_DATE = 0 
Const COND_TEMPERATURE = 1 
Const COND_HUMIDITY = 2 

Dim Dates, Temperatures, Humidity, i 
Dim AmbientConditions() 

Dates = Split("12.02.2016, 13.08.2017, 19.05.2018", ", ") 
Temperatures = Split("23.1, 24.9, 75.3", ", ") 
Humidity = Split("26, 29, 95", ", ") 

ReDim AmbientConditions(2, UBound(Dates)) 

For i = 0 to Ubound(Dates) 
    AmbientConditions(COND_DATE, i) = Dates(i) 
    AmbientConditions(COND_TEMPERATURE, i) = Temperatures(i) 
    AmbientConditions(COND_HUMIDITY, i) = Humidity(i) 
Next 

For i = 0 To UBound(AmbientConditions, 2) 
    WScript.Echo AmbientConditions(COND_DATE, i) 
    WScript.Echo AmbientConditions(COND_TEMPERATURE, i) 
    WScript.Echo AmbientConditions(COND_HUMIDITY, i) & vbCrLf 
Next 

输出:

 
12.02.2016 
23.1 
26 

13.08.2017 
24.9 
29 

19.05.2018 
75.3 
95 

也跟着@Tomalak'ssuggestion to use Named Constants为各种尺寸。

+1

您的代码只返回3个元素中的2个。您需要从For循环和维度代码中删除“-1”。 – CoveGeek

+0

@CoveGeek好的,现在就修好。 – Lankymart