2016-02-12 72 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