现有一个这样的数组:(示例)
1
2
3
6
5
4
8
9
2
5
6
......
数组大小不变,在数组末加入一个数据,数组第一个数据删除
怎样才能实现?(注意数组很大)

解决方案 »

  1.   

    维数可变+索引指针:
    Dim a() As Integer
    Dim p As LongPrivate Sub Command1_Click()
    MsgBox a(p) & "-" & a(UBound(a))
    End SubPrivate Sub Command2_Click()
    p = p + 1
    ReDim Preserve a(99 + p)
    a(UBound(a)) = UBound(a)
    End SubPrivate Sub Form_Load()
    Dim i As Integer
    ReDim a(99)
    For i = 0 To 99
        a(i) = i
    Next i
    End Sub
      

  2.   

    试试这样...在益处范围内还是比较快的
    Option Explicit
    Dim str As String
    Dim a As VariantPrivate Sub Command2_Click()
        Dim i As Integer
        i = InStr(str, ",")
        str = Mid(str, i + 1)
        str = str & "," & CInt(Rnd * 10000)
        'Dim a As Variant
        a = Split(str, ",")
    End SubPrivate Sub Form_Load()
    Dim i
    For i = 1 To 10000
        str = str & "," & CInt(Rnd * 10000)
    Next
    str = Mid(str, 2)
    End Sub就是用一字符串来存放数组,然后对字符串简单操作,然后再分割
      

  3.   


            Dim a() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
            Dim i As Integer
            Do While i < a.Length - 1
                a(i) = a(i + 1)
                i = i + 1
            Loop
            a(a.Length) = 11
    这样的缺点是速度慢
      

  4.   

    方法1.重复一次,用api:copymemory。
    方法2.不清楚楼主的具体应用,但可以考虑这样试试:由于数组大小不变,只需要用一个变量存储数组开始那个元素的索引号就可以了,赋值后,变量加一或归0,这样可以避免移动整个数组,适用于大数组。
      

  5.   

    没有API声明,随便给点关键代码给你
    dim  x(100) as integer
    dim ii  as integer
    for ii = 0 to 100
      x(ii) = rnd * 100
    nextdim byt(101 * 2 -1) as byte
    call copymemory(byt(0),xx(0),101*2)
    call copymemory(xx(0),xx(2),100*2)xx(100) = newdata