2015-06-17 30 views
1

朋友我目前有一個嚴重的問題,老實說,我不知道爲什麼這不按預期工作。我更多的是自定義的C#比VB誰能與幫助下面的代碼示例Arraylist with Multi Dimentional for loops

請注意,該字符串是從其他類通過,不能更改

The string arrL = "Someone#Something,200,First,50.00,60,Second,60.00,20,Third,70.00,120" 

例如當「有人」是用戶, 「Something」是一個ID,「200」是Totaltime,然後是頻率名稱「First」,頻率是「50.00」,然後是它的運行時間,例如60秒。然後下一個項目等。

Dim Sequence As New ArrayList 
    Sequence.AddRange(arrL.Split(",")) 

    If Sequence.Count > 0 Then 
     RunFreq.ClientName = Sequence(0).ToString.Split("#")(0) 
     RunFreq.ClientProgramName = Sequence(0).ToString.Split("#")(1) 
     RunFreq.ClientProtocolTotalTime = Sequence(1).ToString 

     For i As Integer = 2 To Sequence.Count - 1 
      Dim g() = Sequence(i).ToString().Split(",") 
      Dim b As New ClassWave.ClassFrequency 
      b.Name = g(0) 'Here i get a Value 
      b.Frequency = CDbl(g(1)) '< HERE I get Index was outside the bounds of the array. 
      b.Time = CInt(g(2)) ' Same here Index was outside the bounds of the array.     

     Next 
    End If 

我得到的指數成份股之外界對克(1)和G(2),而不是50.00和60.什麼想法?

+1

'Sequence'已經將字符串拆分爲'','',所以'g'只有一個元素,然後再次嘗試分割它。你還需要打開'Option Strict' – Plutonix

+0

啊是的。有意義,但現在。我該如何去實現預期的結果。 VB和我有分歧;) – Banshee10000

回答

1

預賽:您應該打開Option Strict,並考慮使用List(of String)代替ArrayList

您的第二行將字符串","拆分爲Sequence,因此不需要再次拆分 - 因爲它們無法進一步拆分(而且您沒有檢查計數),所以出現錯誤。這工作:

Dim arrl As String = "Someone#Something,200,First,50.00,60,Second,60.00,20,Third,70.00,120" 

Dim Sequence As New ArrayList 
Sequence.AddRange(arrl.Split(","c)) 

Dim a, b, c As String 

If Sequence.Count > 0 Then 
    a = Sequence(0).ToString.Split("#"c)(0) 
    b = Sequence(0).ToString.Split("#"c)(1) 
    c = Sequence(1).ToString 
    Console.WriteLine("{0} - {1} - {2}", a, b, c) 

    For i As Integer = 2 To Sequence.Count - 1 Step 3 

     a = Sequence(i + 0).ToString    
     b = Sequence(i + 1).ToString    
     c = Sequence(i + 2).ToString    

     Console.WriteLine("{0} - {1} - {2}", a, b, c) 
    Next 
End If 

你也可以用這個分裂:

Sequence.AddRange(arrl.Split("#"c, ","c)) 

這將創建一個ArrayList的12個元素,但由於前3個部分去其他地方,這並不有儘可能多的價值。

輸出:

有人 - 什麼 - 200
首先 - 50.00 - 60
二 - 60.00 - 20
三 - 70.00 - 120

注意.ToString()在需要時從ArrayList中獲取,因爲它沒有輸入 - 它只包含Object。 A List(of String)會將部件存儲爲字符串。

+1

每天學習新東西。非常感謝你** Plutonix **你的解決方案是正確的。在這一週的較好的一段時間裏,我的頭撞到了牆上。再次感謝它的讚賞! – Banshee10000

+0

如果你不能完全依賴於正確格式的字符串,你可能想要檢查分割結果的數量,以便在數據失敗時不用完數據......或者添加一個Try/Catch – Plutonix

+0

在某些點我記得我沒有檢查數組的數量,但嘗試了很多不同的東西,我很快就失去了。不過,合理的建議謝謝請牢記這一點。 – Banshee10000