Array

BlitzMax Forums/BlitzMax Beginners Area/Array

kiami(Posted 2005) [#1]
I like to make an array of a user type. This is very common in c c++, For example:
type x
field f1:int
field f2:float
end type

then suppose this is correct:

Local MyArray:x[]
MyArray = New x[100]
MyArray[0].f1 = 1204
MyArray[0].f2= 25.45

I tried something like that but it didn't work. Any idea to do such a thing?

Also, is any Array library available? I don't want to make one if there is one for BlitzMax.

Also, Blitz's site forum search doesn't work, any comment?


bradford6(Posted 2005) [#2]
Type x
	Field f1:Int
	Field f2:Float
	Field name:String
End Type



Local myarray:x[]

myarray = myarray[..100]

For c = 0 To 3
	myarray[c] = New x
	RestoreData mydata
	ReadData myarray[c].name,myarray[c].f1,myarray[c].f2
Next


Print myarray[2].name


#mydata
DefData "John",100,29.4
DefData "Larry",4444, 12345.45
DefData "Fred",3,3.19




kiami(Posted 2005) [#3]
Beautiful, thanks.


kiami(Posted 2006) [#4]
A textbook style example:

Local c=6
Local r=6

Type x

Field a:Int=0
Field b:String=""

End Type

Local map:x[c,r]

map[0,0]=New x
map[1,1]=New x
map[2,2]=New x
map[3,3]=New x

map[0,0].a=23
map[1,1].b="hello"

Print map[0,0].a
Print map[1,1].b


FlameDuck(Posted 2006) [#5]
MyArray[0].f1 = 1204
MyArray[0].f2= 25.45

I tried something like that but it didn't work. Any idea to do such a thing?
Before you can access the members, you need to create the objects.
MyArray[0] = New x
MyArray[0].f1 = 1204
etc..



kiami(Posted 2006) [#6]
Yes, I just wanted to provide reference for using 2d array and types.

map[x,y]=new x above, is creating object, which is both 2d and have type. I thought this is helpful more than the examples in "Beginners guide ..".

Actually, map[0,0].a, and map[0,0].b, would show the usage of type and 2d array better. It shows map[0,0] has two cells. If there be any question, I will include that instance in my example.

Finally, bradford6's codes above, creates objects in a loop. Which is a smart and beautiful method. But, I find his example for beginners, like me, too advanced. Teaching is about making things easier.


bradford6(Posted 2006) [#7]
Type x
	Field f1:Int
	Field f2:Float
	Field name:String
End Type



Local myarray:x[]

myarray = myarray[..100]

myarray[0] = New x
myarray[0].name = "Big Bird"
myarray[0].f1 = 100
myarray[0].f2 = 29.4444

myarray[1] = New x
myarray[1].name = "Bert"
myarray[1].f1 = 444
myarray[1].f2 = 3.3333

myarray[2] = New x
myarray[2].name = "Ernie"
myarray[2].f1 = 55555
myarray[2].f2 = 1.001




Print myarray[2].name
Print myarray[0].f1



kiami(Posted 2006) [#8]
Evolving all above babies:

Strict
Type x

	Field a:Int=0
	Field b:String=""
	
	Method Print_BlitzMax()
		For Local i=0 To 7
			Print "BlitzMax"
		Next
	End Method
	
End Type

Type world_map

	Field c=6
	Field r=6
	Field map:x[c,r]

End Type

Local myworld:world_map =New world_map

myworld.map[0,0]=New x

myworld. map[1,1]=New x
myworld. map[2,2]=New x
myworld. map[3,3]=New x

myworld.map[0,0].a=23
myworld.map[0,0].b="hello"

Print myworld.map[0,0].a
Print myworld. map[0,0].b
myworld.map[0,0].Print_BlitzMax()



Augen(Posted 2006) [#9]
Medi, I like that idea of making things simpler. Check out my new cool signature for how to put code in boxes.


FlameDuck(Posted 2006) [#10]
Check out my new cool signature for how to put code in boxes.
You should use either the "faq" forum code, or a relative path, so that it'll use the domain the user is using, which might not be blitzmax.com.


kiami(Posted 2006) [#11]
OK, now I see, I was wondering how to make my codes appear the ways your does. Now, I know. Thanks, I will follow Augen's guide line.


kiami(Posted 2006) [#12]
Augen, if I put my codes within
 ... 
does it appear the way FlamDuck's codes has appeared? Is that what your sheet says? The reason I want to make sure is that I don't want to mess up forum pages by practices.


kiami(Posted 2006) [#13]
Never mind Augen, I got it.


kiami(Posted 2006) [#14]
This example, is a simplified form of what I was finally able to use in the map editor that I created for my program. I think it might help beginners like me to organize their mind and their codes - at least to begin with.

Here are two classes. In the second one there is a 2d array. Notice the way the array is objectified, and needs necessarly to do so. I learned this from FlameDuck (the code above) and have applied it the way you can see. Unfortuanely, [..100] doesn't work for 2d arrays. So, for dynamic array, we need few more functions that one day I may code it and show it.

SuperStrict
'//////////////////////////
Type report_cells

	Field a:Int=0
	Field b:String=""
	
	Method Print_BlitzMax()
		For Local i:Int=0 To 7
			Print "report_content method works"
		Next
	End Method
	
End Type

'/////////////////////////////
Type report_table

	Field column:Int=6
	Field row:Int=6
	Field table:report_cells[column,row]
	
End Type
'//////////////////////////////


Local the_report:report_table=New report_table

For Local m:Int=0 To the_report.column-1
		For Local n:Int=0 To the_report.row-1
			
			the_report.table[m,n] = New report_cells
			
		Next
Next

For Local m:Int=0 To the_report.column-1
		For Local n:Int=0 To the_report.row-1
			report_cells(the_report.table[m,n]).a=12
			report_cells(the_report.table[m,n]).b="hi there!"
			
		Next
Next

Print report_cells(the_report.table[1,1]).a
Print report_cells(the_report.table[0,0]).b
Print report_cells(the_report.table[2,3]).b
Print report_cells(the_report.table[1,4]).a
Print report_cells(the_report.table[3,2]).b
Print report_cells(the_report.table[2,3]).b