在下面的函数中(我还没有测试过),我需要在数组中移动值,然后相应地调整数组大小,问题在于我们是否在索引中向上移动值,或者向下移动需要先调整数组大小或移动值。你可以看到我有一个If
语句,并且它有移动和调整大小的范围,但两种情况都有相同的结果(仅切换了行的顺序),是否有一种DRYer方式来编写它?
Private Function Update_Index(index As Interger, move As Integer) As Boolean
Dim last As Integer
last = UBound(Var_array, 2)
If move < 0 Then
ReDim Preserve Var_array(2, last + move)
For i = index - 1 To last
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
Else
For i = index - 1 To last
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
ReDim Preserve Var_array(2, last + move)
End If
End Function
注意:在这种情况下,重复似乎是无害的,但我正在调整更大的代码块以满足这些需求。
答案 0 :(得分:1)
创建一个子程序,通过引用传递数组。
Private Sub Update(ByRef array as variant, ByVal index as long, ByVal move as long)
For i = index - 1 To ubound(array)
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
End Sub
Private Sub Update_Index(index As Interger, move As Integer) As Boolean
If move < 0 Then
ReDim Preserve Var_array(2, last + move)
Update Var_array, index, move
Else
Update Var_array, index, move
ReDim Preserve Var_array(2, last + move)
End If
End Function
你可能会提取另一种方法,但我不确定为什么你ReDim
前后取决于移动大小。
答案 1 :(得分:1)
Private Function Update_Index(index As Integer, move As Integer) As Boolean
Dim last As Integer
last = UBound(Var_array, 2)
If move < 0 Then ReDim Preserve Var_array(2, last + move)
For i = index - 1 To last
Var_array(i, 1) = Var_array(i + move, 1)
Var_array(i, 2) = Var_array(i + move, 2)
Next i
If move > 0 Then ReDim Preserve Var_array(2, last + move)
End Function