Results 1 to 4 of 4

Thread: Single for-loop traversal over 2D/3D arrays

Threaded View

  1. #1

    Thread Starter
    Lively Member Paul A. Gagniuc's Avatar
    Join Date
    Feb 2022
    Location
    Romania, Bucharest
    Posts
    66

    Single for-loop traversal over 2D/3D arrays

    This source code shows the traversal of a two-dimensional array by one for-loop structure. A 2D-array variable (A) is declared. A string variable t is initially set to empty. A variable v is set to zero and it represents the main counter of the for-loop. Another two variables (ie. i and j) are initialized with value zero and are the main coordinates for element identification. Each dimension of array A is stored in variables n and m, namely the number of rows in n and the number of columns in m. The upper limit of the for-loop is calculated based on the two known dimensions n and m. Thus, m times n establishes the upper limit of the for-loop. Here, the value of the counter v from the for-loop is used to calculate the i and j values that are used as an index to traverse the array variable A. The value of variable j is computed as the v % m and the result of this expression indicates the reminder (ex. 5 mod 3 is 2). The secret to this implementation is a condition that increments a variable i (rows) each time j (columns) equals zero. Thus, in this manner this approach provides the i and j values that a nested for-loop provides. At each iteration, the value from an element is added to the content of variable t. Once the end of the for-loop is reached, the value collected in variable t is printed in the output for inspection.

    Please also see: Single "for-loop" traversal over three dimensional arrays.

    Code:
    Sub main()
    
        Dim A(0 To 1, 0 To 2) As String
        Dim i As Integer
        Dim t As String
    
        A(0, 0) = "a"
        A(0, 1) = "b"
        A(0, 2) = "c"
        A(1, 0) = "d"
        A(1, 1) = "e"
        A(1, 2) = "f"
        
        
        n = UBound(A, 1) - LBound(A, 1) + 1  ' rows
        m = UBound(A, 2) - LBound(A, 2) + 1  ' columns
        
        i = 0
        j = 0
        
        For v = 0 To (n * m) - 1
        
            j = v Mod m
    
            If (v <> 0 And j = 0) Then i = i + 1
            
            t = t & v & " A(" & i & "," & j & ")="
            t = t & A(i, j) & vbCrLf
    
        Next v
        
        Debug.Print (t)
    
    End Sub
    Some mirrored examples in different programming languages (including VB6), may also be of interest.
    Last edited by Paul A. Gagniuc; Apr 8th, 2023 at 02:27 AM.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width