cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 
2024 Technology Preview Program

2024 Technology Preview Program:
Master powerful new features and shape the latest BIM-enabled innovations

GDL
About building parametric objects with GDL.

Length/Size of one of the sub-arrays of a multi-dim array

dushyant
Enthusiast
Hi
Is there a way to get the length/size of a sub-array of a multi-dimensional array?
DIM myArray[][]
myArray[1][1] = 500
myArray[1][2] = 510
myArray[2][1] = 600
myArray[2][2] = 610
myArray[2][3] = 620
myArray[3][1] = 700
myArray[3][2] = 710
myArray[3][3] = 720
myArray[3][4] = 730
VARDIM1(myArray[1]) !gives 4, but I need the size of just myArray[1], which is 2

I tried VARDIM2(myArray[1]) also but it doesn't give the required output.
32 REPLIES 32
Barry Kelly
Moderator
dushyant wrote:
Barry, so you mean it builds like a matrix of 3x4 cells and assigns 0 to any non-assigned cells?
I think so.

If you created an array in the parameter list it would look like this.

Barry.
One of the forum moderators.
Versions 6.5 to 27
i7-10700 @ 2.9Ghz, 32GB ram, GeForce RTX 2060 (6GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11
dushyant
Enthusiast
Got it Barry, thanks.

Just wondering if we can loop through the values of a dictionary, like we do through an array:
FOR i = 1 TO VARDIM1(myArray) ...
Barry Kelly
Moderator
dushyant wrote:
Got it Barry, thanks.

Just wondering if we can loop through the values of a dictionary, like we do through an array:
FOR i = 1 TO VARDIM1(myArray) ...

I have not delved into DICTIONARY yet so I have no idea.

You can loop through the array as you have shown but just ignore if the value is zero.

Barry.
One of the forum moderators.
Versions 6.5 to 27
i7-10700 @ 2.9Ghz, 32GB ram, GeForce RTX 2060 (6GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11
Barry Kelly
Moderator
Barry wrote:
You can loop through the array as you have shown but just ignore if the value is zero.

Something like this?
This will just print the values in each dimension but not the zero values.
FOR n = 1 TO VARDIM1(myArray)
	FOR i = 1 TO VARDIM2(myArray)
		IF myArray <> 0 THEN
			PRINT myArray
		ENDIF
	NEXT i
NEXT n
Barry.
One of the forum moderators.
Versions 6.5 to 27
i7-10700 @ 2.9Ghz, 32GB ram, GeForce RTX 2060 (6GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11
dushyant
Enthusiast
Barry, I had tried that but it seems to still scan through the part inside the IF statement (even if the condition is false) and gives an error:
Uninitialized array element at index: [1][3]   
(as I didn't set [1][3], but only up to [1][2])
Dominic Wyss
Booster
In that case, multi-dim arrays might not be helpful for what I am trying to do. Thanks guys for the help.

Can dictionaries be looped through?
No. Unfortunately not.
and keys can't be reached by variables... I suggested it, but graphisoft refused
AC27 CHE - macOS Ventura M1
Podolsky
Ace
Just to clear the situation. Do not exist any sub-arrays. Exist one-dimensional arrays: myArray[], myArray[1], myArray[2], myArray[3], myArray[4]...
And two-dimensional arrays: myArray[][], myArray[1][1], myArray[1][2], myArray[2][1], myArray[2][2]...
If you refer two-dimensional array in your script as one dimensional - script won't work and will give an error. That means if you have let say 3x4 array: myArray[3][4] you cannot use anywhere in the script myArray[1]

And, by the way, three-dimensional arrays in mathematic called 'matrix' - like movie. It's when you have z to your array. Just imagine - array tables stack on top of each other. Or multipage excel spreadsheet...
Barry Kelly
Moderator
dushyant wrote:
Barry, I had tried that but it seems to still scan through the part inside the IF statement (even if the condition is false) and gives an error:
Uninitialized array element at index: [1][3]   
(as I didn't set [1][3], but only up to [1][2])

This is all I have written in the Master script.
No parameters in the parameter list and nothing in any other script.
The just open the 2D or 3D preview and it will print ... 500, 510, 600, 610, 700, 710, 720, 730
No error messages that I see.

Barry.
One of the forum moderators.
Versions 6.5 to 27
i7-10700 @ 2.9Ghz, 32GB ram, GeForce RTX 2060 (6GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11
dushyant
Enthusiast
Strange, I get this error..
Barry Kelly
Moderator
dushyant wrote:
Strange, I get this error..

What version of Archicad are you using?
I did this in 22 and just checked in 25 and still no error messages.

Barry.
One of the forum moderators.
Versions 6.5 to 27
i7-10700 @ 2.9Ghz, 32GB ram, GeForce RTX 2060 (6GB), Windows 10
Lenovo Thinkpad - i7-1270P 2.20 GHz, 32GB RAM, Nvidia T550, Windows 11

Didn't find the answer?

Check other topics in this Forum

Back to Forum

Read the latest accepted solutions!

Accepted Solutions

Start a new conversation!