Multi-Dimensional Arrays

Recommended Posts

These things have always made my head hurt for some reason, and I can't seem to figure this out.

I want an array to hold a list of names, and each name has 3 attributes that go with it, Address, Phone#, and Zip Code.

So the first element might look like: ["John"] ["987 Foo St"] [5555555555] [90210]

I then need to be able to search through the first element, the Name, until a match was found, then extract the 3 corresponding attributes

Psuedocode:

```Local \$MyArray[x][x][x][x] = ?
Local \$SearchingFor = "Fred"
Local \$Phone
Local \$Zip

For \$i = 0 To 20 ;I know how many names are in the list
If \$SearchingFor = \$MyArray[\$i] Then
\$Phone = \$MyArray[\$i][][PhoneIsHere][]
\$Zip = \$MyArray[\$i][][][ZipIsHere]
ExitLoop
Next```

I'm probably way off target, or completely misunderstanding how MD arrays work. Am I even close, and if so, does anyone have a short example? The wiki just confused me, but that's probably because it used all numbers instead of different categories. The key point is I need a way to have four variables that are tied to each other with a way to search through the first one with a for/to loop in order to extract the other three. I have well over 500 sets of data to sort through, and I'd rather not make a Select-Case/If-Then loop that big with over 500 separate variables.

Edited by JSands

Share on other sites

Here is an example of a 2D multi-dimensional array.

```#include <Array.au3>

Local \$MyArray[20][4] = _
[["Name", "Address", "Phone#", "Zip Code"], _
["John", "987 Foo St", "5555555555", 90210], _
["Fred", "223 Fi St", "5555555556", 90211]]
_ArrayDisplay(\$MyArray)

Local \$SearchingFor = "Fred"
Local \$Phone
Local \$Zip
Local \$iIndex = _ArraySearch(\$MyArray, \$SearchingFor)

MsgBox(0, "Found " & \$SearchingFor & " @ index " & \$iIndex, \$MyArray[\$iIndex][0] & " " & \$MyArray[\$iIndex][1] & " " & \$MyArray[\$iIndex][2] & " " & \$MyArray[\$iIndex][3])```

Share on other sites

```Dim \$MyArray[5][4] = _
[["John","897 Foo St","5555555555","90210"], _
["Jim","53 FooBar St","3333333333","98642"], _
["Paul","1 Foo Ln","2222222222","67361"], _
["Fred","356 Bar St","4444444444","23562"], _
["Andy","16 Bar Ave","1111111111","48036"]]

\$SearchingFor = "Fred"

For \$i = 0 To UBound (\$MyArray) -1 ; Array is zero based
If \$MyArray[\$i][0] = \$SearchingFor Then ExitLoop ; No need to carry on searching
Next

If \$i < UBound (\$MyArray) Then ; The loop was terminated on finding a match
\$Phone = \$MyArray[\$i][2]
\$Zip = \$MyArray[\$i][3]
ConsoleWrite(\$SearchingFor & "|" & \$Address & "|" & \$Phone & "|" & \$Zip)
EndIf```

Share on other sites

Here is an example of a 2D multi-dimensional array.

Perfect example, now I get it. I swear, every example I've seen uses a bunch of integers that makes it difficult to follow. That _ArrayDisplay is a cool function I hadn't seen yet, really made it simple to see what happened and what I need to do. Thanks again!

As mentioned in my first post, I read that and the part about MD Arrays confused me. I saw this:

```Local \$arr[3][3][3][3] = [[[[1, 2, 3],[2, 3, 4],[3, 4, 5]], _
[[1, 2, 3],[2, 3, 4],[3, 4, 5]],[[1, 2, 3],[2, 3, 4],[3, 4, 5]]], _
[[[1, 2, 3],[2, 3, 4],[3, 4, 5]],[[1, 2, 3],[2, 3, 4],[3, 4, 5]], _
[[1, 2, 3],[2, 3, 4],[3, 4, 5]]],[[[1, 2, 3],[2, 3, 4],[3, 4, 5]], _
[[1, 2, 3],[2, 3, 4],[3, 4, 5]],[[1, 2, 3],[2, 3, 4],[3, 4, 5]]]]```

And had no idea which set was being assigned and to where. Malkey's example, and the one you posted as well, are much more easy to follow than the wiki. Thanks again to you both.

Edited by JSands

Share on other sites

well done, another aspiring autoit scripter joins the assembly.

Edited by spudw2k

Spoiler

Misc Code Snippets:
Projects: SubnetCalc
Cool Stuff:

Share on other sites

Yes that example is a four dimensional array (which is perhaps a little hard to imagine). You only need a two dimensional array. I use _ArrayDisplay a lot to check that the contents of a one or two dimensional array are correct. You will become more familiar with arrays with practice. Happy to assist.

Create an account

Register a new account