假设:
- 数组中只有末尾是空的元素
- 你想要截断所有行,使它们具有相同数量的元素(可能会丢失数据)
- 每一行至少有一个元素
那么你可以确定哪一行是最小的,然后使用
ReDim Preserve
:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim modvaluestmp(,) As String = {
{"sometext1", "sometext2", "sometext3", "sometext4", Nothing, Nothing},
{"sometext5", "sometext6", "sometext7", "sometext8", Nothing, Nothing},
{"sometext9", "sometext10", Nothing, Nothing, Nothing, Nothing}
}
Console.WriteLine(DisplayArray(modvaluestmp))
Dim max As Integer = modvaluestmp.GetUpperBound(1)
For y As Integer = 0 To modvaluestmp.GetUpperBound(0)
For x As Integer = modvaluestmp.GetUpperBound(1) To 0 Step -1
If Not IsNothing(modvaluestmp(y, x)) AndAlso x < max Then
max = x
Exit For
End If
Next
Next
ReDim Preserve modvaluestmp(modvaluestmp.GetUpperBound(0), max)
Console.WriteLine(DisplayArray(modvaluestmp))
End Sub
Private Function DisplayArray(ByVal arr(,) As String) As String
Dim sb As New System.Text.StringBuilder
For y As Integer = 0 To arr.GetUpperBound(0)
For x As Integer = 0 To arr.GetUpperBound(1)
sb.Append(If(x = 0, "", ", ") & arr(y, x))
Next
sb.AppendLine("")
Next
Return sb.ToString
End Function
输出:
sometext1, sometext2, sometext3, sometext4, ,
sometext5, sometext6, sometext7, sometext8, ,
sometext9, sometext10, , , ,
sometext1, sometext2
sometext5, sometext6
sometext9, sometext10
这是使用 List(Of List(Of String)
) 的示例:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim modvaluestmp(,) As String = {
{"sometext1", "sometext2", "sometext3", "sometext4", Nothing, Nothing},
{"sometext5", "sometext6", "sometext7", "sometext8", Nothing, Nothing},
{"sometext9", "sometext10", Nothing, Nothing, Nothing, Nothing},
{"sometext11", "sometext12", "sometext13", Nothing, Nothing, Nothing}
}
Dim stamps As New List(Of List(Of String))
For y As Integer = 0 To modvaluestmp.GetUpperBound(0)
Dim newRow As New List(Of String)
For x As Integer = 0 To modvaluestmp.GetUpperBound(1)
If Not IsNothing(modvaluestmp(y, x)) Then
newRow.Add(modvaluestmp(y, x))
End If
Next
stamps.Add(newRow)
Next
For Each row As List(Of String) In stamps
Console.WriteLine(String.Join(", ", row))
Next
' Example of accessing an element directly:
Console.WriteLine("stamps(0)(2) = " & stamps(0)(2))
End Sub
String()()
。 - Bjørn-Roger Kringsjå