Jump to content

Recommended Posts

Posted

The wiki has a very good tutorial describing how arrays work.

My UDFs and Tutorials:

  Reveal hidden contents

 

  • Moderators
Posted

tes5884,

I recommend the Arrays tutorial in the Wiki. Please post again if you still have questions. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted

x axis VS x + y axis VS x + y + z axis

Remember in geometry when you had to calculate distances in a 3 dimensional object? you had your x,y, and z axis. Same idea.

x = rows

y = columns

z = depth

Local $array[1] ; single dimension array with 1 element

Local $2D[1][2] ; two dimensional array with 2 indexes and 1 element in each index.
; i.e. $2D[0][0], $2D[0][1]

Local $3D[1][2][2] ; three dimensional array with 2 planes, 2 indexes on each plane, and 1 elements in each index
; i.e. $3D[0][0][0], $3D[0][1][0], $3D[0][0][1],  $3D[0][1][1]
  Reveal hidden contents

 

Posted (edited)

Looking at it one way, the number of dimensions is almost meaningless.

It's just another way of labelling the same variables or "mailboxes" that you're creating.

$aArray[24] is the same thing as $aArray[3][8] (3 x 8 = 24) which is the same thing as $aArray[3][2][4] (3 x 2 x 4 = 24).

They are all just a table of 24 variables.

If your 3-story apartment building has 24 units and you just want to store all the apartment numbers then use $aArray[24] (apt#).

If you want to organize them by floor you could create the same 24 boxes but reference them as $aArray[3][8] (floor/apt#)

If you had a reason to keep the apartments on the north side of the building separate from those on the south side, then you could setup your 24 mailboxes as $aArray[3][2][4] (floor/north-south/apt#)

When you reference the 17th element of the 1-dimension array; $aArray[17], it is the same thing internally as referencing element $aArray[2][0][1] of the 3-dimension array (2 x 8 + 0 x 4 + 1 x 1 = 17)

Hope I haven't made things worse ;)

Edit: You could simulate any number of dimensions using a 1-dimension array and a few lines of code. This is, at least conceptually, the same thing that goes on internally when you decide to split your array into different dimensions:

Global $aApartments[24] = ["1A","1B","1C","1D","1E","1F","1G","1H","2A","2B","2C","2D","2E","2F","2G","2H","3A","3B","3C","3D","3E","3F","3G","3H"]

MsgBox(0, "1-Dimension", Dimension_Simulator("24", "17")) ; get element [17] of $aArray[24]
MsgBox(0, "2-Dimension", Dimension_Simulator("3*8", "2|1")) ; get element [2][1] of $aArray[3][8]
MsgBox(0, "3-Dimension", Dimension_Simulator("3*2*4", "2|0|1")) ; get element [2][0][1] of $aArray[3][2][4]

Func Dimension_Simulator($structure, $element)
    Local $aStructure = StringSplit($structure, "*")
    Local $iSize = Execute($structure) ; total elements

    Local $aElement = StringSplit($element, "|")
    Local $iTarget
    For $x = 1 to $aElement[0] ; calculate element offset
        $iTarget += $aElement[$x] * ($iSize / $aStructure[$x])
     $iSize /= $aStructure[$x]
    Next
    Return $aApartments[$iTarget]
EndFunc
Edited by Spiff59
Posted (edited)

Question; if I have a variable

toast = $var[2][2]

Does that mean I can have values like the following;

$var[0][0]

$var[0][1]

$var[0][2]

$var[1][0]

$var[1][1]

$var[1][2]

$var[2][0]

$var[2][1]

$var[2][2]

or am I missing something?

Thanks!!!

Edited by tes5884
Posted

Your list of array elements is correct.

Array elements always start with an index of 0. If you have an $array[7] the index goes from 0 to 6 (or "UBound($array, 1) - 1)".

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

  On 8/13/2012 at 3:04 PM, 'water said:

Your list of array elements is correct.

Array elements always start with an index of 0. If you have an $array[7] the index goes from 0 to 6 (or "UBound($array, 1) - 1)".

Does index 0 hold a comparable value to any other number?

In other words, does the first index (0), point to an element just like any other index ? or is it any different.

Posted

Depends on how the array was created. It's often referred to as "zero-based" or "one-based". Means the data starts in row 0 or row 1. If it starts in row 1 then row 0 contains the number of rows.

If it is a two dimensional array then $array[0][0] contains the number of rows and $array[0][1] contains the number of columns.

Check function StringSplit as an example. You can decide if the function returns a zero- or one-based array.

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted

It's just like any other index.

Many functions that return an array (_FileListToArray()) use the 0 index to hold specific information. In the case of _FileListToArray(), the 0 index holds the total file/folder count. For these functions you can iterate over them as follows:

For $i = 1 To $array[0]
    msgbox(0,"",$array[$i])
Next

For 0-based arrays, you can iterate over them as:

For $element in $array
    msgbox(0,"",$element)
Next
  Reveal hidden contents

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...