views:

254

answers:

4

Hello,

I was wondering if there is a way to make an array which would have multiple types of data fields.

So far I was using aMyArray: array of array [0..1] of TPoint;

But now, it is not enough for me. I need to add 3 more elements to the existing 2 "Point" elements making it an array like aMyArray: array of (TPoint,TPoint,real,real,real)

So each element of aMyArray would have 5 'children', 2 of which are of a TPoint type and 3 of them are 'real' type.

Is this possible to implement somehow?

+12  A: 

Maybe a record like

TMyType = record
  Points: array[0..1] of TPoint;
  Floats: array[0..2] of Real;
end;

or

TMyType = record
  Point0: TPoint;
  Point1: TPoint;
  Float0: Real;
  Float1: Real;
  Float2: Real;
end;

works for you.

Ulrich Gerhardt
+1. Structures with fixed numbers of elements with heterogeneous types are exactly what records are for.
Rob Kennedy
This is *the* solution.
Andreas Rejbrand
A significant clue being that `TPoint` itself is a record.
afrazier
A: 

You can use an array of Variants to store different data in each element. But array were designed to store homogenous data. If your data storage requirements are more complex, start to look for different containers.

ldsandon
Variants can't hold records like TPoint.
Rob Kennedy
A: 

I would use a TStringList or decendant, with AddObject.

Chris Thornton
Really? Could you demonstrate that, please?
Rob Kennedy
using a lot of memmory with no need...
Astronavigator
A: 

You may also want to use variant records. For an example see this

Joe Meyer