Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Advanced
Sep 11, 1999

Quickly clear a portion of an array

The fastest way to clear an array is to ReDim (if the array is dynamic) or Erase it (if the array is Static). However, if you want to clear a portion of an array, it seems that you must code a For-Next loop.

If you are dealing with numeric arrays, there is a faster alternative, based on the ZeroMemory API function which, as it names implies, can fill a memory area with zeroes. See how you can use this function to clear a sub array of Longs:


Private Declare Sub ZeroMemory Lib "kernel32" Alias "RtlZeroMemory" (dest As _
    Any, ByVal Bytes As Long)

' Declare an array and fill it with data
Dim a(1000) As Long
For i = 1 To UBound(a)
    a(i) = i
Next
' Clear 100 elements, starting at a(200)    
ZeroMemory a(200), 100 * Len(a(1))
Note that the number of bytes to be cleared is given by the product of the number of elements to be cleared multiplied by the length of each element. Using the Len() function ensures that the above code works even if you change the type of the array.

You can use this approach with any numeric array, as well as Variant arrays that contain only numbers (including the Decimal subtype) and arrays of User Defined Types that contains only numbers and fixed-length strings. If you use the ZeroMemory function with variable-length strings or objects what you get is a GPF.

Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date