Redim 保留数组

Redim Preserve array

我正在向 listOF 添加元素,然后将该列表转换为数组。然后,我需要向每个数组添加特定数量的元素,同时还要保留每个元素中的数据。我很接近但还没有。

这是行不通的。该数据保留在元素中,但代码没有将指定数量的元素添加到每个数组(每个数组需要 = 51)。

一如既往地感谢您的帮助。谢谢。

 'Add an element to each ListOf(Integer) based on how many rows are in the DataGridView
        For Each r As DataGridViewRow In dgvStepTest.Rows
            accels.Add(r.Cells(0).Value) : decels.Add(r.Cells(1).Value) : Speeds.Add(r.Cells(2).Value)
            holds.Add(r.Cells(3).Value) : flows.Add(r.Cells(4).Value) : Temps.Add(r.Cells(5).Value)
        Next

        'Convert each ListOf(Integer) to an Array
        accels.TrimExcess() : accelRates = accels.ToArray
        decels.TrimExcess() : decelRates = decels.ToArray
        Speeds.TrimExcess() : spindleSpeeds = Speeds.ToArray
        holds.TrimExcess() : holdTimes = holds.ToArray
        flows.TrimExcess() : flowRates = flows.ToArray
        Temps.TrimExcess() : oilTemps = Temps.ToArray

        'Now determine the number of elements to add to each of the arrays so that the length of each array = 51
        num = (51 - accelRates.Length)

        'Now add the number of elements to each array based on the number calculated above, while also preserving the data
        'already in each element in each of the arrays.  New elements added should have values = 0.
        Dim jaggedArray()() = New Integer(5)() {accelRates, decelRates, spindleSpeeds, holdTimes, flowRates, oilTemps}
        For Each [Array] In jaggedArray
            ReDim Preserve Array(Array.Length + num)
        Next

我认为您看到的是设置数组中项目总数的 redim 语句,因此您需要做的就是将数组重新调整为您想要的大小,无需进行数学计算,记住数组是基于 0 的,这意味着使用 redim 语句将数组大小设置为 51 实际上将有 52 条记录。这是一个快速的小测试来说明我的意思。

Module Module1
    Sub Main()
        Dim accels As List(Of Integer) = New List(Of Integer)()
        accels.AddRange({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
        Dim accelrates = accels.ToArray()
        Dim num As Integer = (50) ' Index is zero based there for use 50
        ReDim Preserve accelrates(num)
    End Sub
End Module

或者您可以按照 VisualVincent 的建议使用 Array.Resize

Array.Resize(accelrates, 51)

进一步观察,您的 For Each 语句似乎没有按您预期的那样工作。我会将其更改为类似这样的 For 语句。

For x = 0 To jaggedArray.Count - 1
    ReDim Preserve jaggedArray(x)(50)
Next