刪除數組中間段後,需將後段元素前移,使下標連續。
| 方法 | 適用場景 | 代碼複雜度 |
|---|---|---|
| 循環賦值 | 數據量小、類型復雜 | 低 |
| CopyMemory (RtlMoveMemory) | 大數據量、基本類型 (Long, Double 等) | 中 |
| ReDim Preserve + 複製 | 需動態縮小數組 | 低 |
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal Length As Long)
Dim arr(1 To 100) As Long
' 刪除 30-40,將 41-100 前移到 31-90
Dim srcOffset As Long, dstOffset As Long, count As Long
srcOffset = 41: dstOffset = 31: count = 60
CopyMemory arr(dstOffset), arr(srcOffset), count * 4 ' 4 字節/Long
' 縮小數組
ReDim Preserve arr(1 To 90)
CopyMemory 僅適用於定長數值類型數組,字符串、變體、對象數組不可用。RtlMoveMemory 正確處理(同 memmove)。