25. september 2003 - 18:05Der er
9 kommentarer og 1 løsning
Array + Array?
Jeg har følgende:
type TNoteArray = array of TNoteRec; //TNoteRec er en record.
var Noter: TNoteArray;
Når jeg gør følgende, får jeg fejl (Operator not applicable to this operand type): Noter := Copy(Noter, Low(Noter), I) + Copy(Noter, I + 1, Length(Noter));
Så spørgsmålet er, om der findes en nem måde at gøre følgende på: Array := Array + Array;
Alternativet, som jeg godt selv kan lave, er at sætte et element af gangen via en løkke, hvilket jeg helst vil undgå.
Stoney -> Jeg kender godt til både SetLength(), Length() og High(), det er dog ikke nogen af dem jeg søger (Og når vi taler om "søger", så har jeg naturligvis søgt her på E efter dynamisk array, og der bliver SetLength, som jeg jo kender i forvejen, nævnt alt for mange gange...).
type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
type anyarray = array of integer;
function addarray(a, b: array of integer): anyarray; var i, n: integer; begin if length(a)<length(b) then n := length(a) else n := length(b); setlength(result, n); for i := 0 to n-1 do result[i] := a[i]+b[i]; end;
var a: array[1..5] of integer = (4,8,3,7,9); b: array[0..3] of integer = (2,7,1,8);
procedure test; var i: integer; y: anyarray; begin y := addarray(a,b); form1.listbox1.items.add(inttostr(length(y))); for i := 0 to length(y)-1 do form1.listbox1.items.add(format('y[%d]=%d', [i, y[i]])); end;
procedure TForm1.Button1Click(Sender: TObject); begin test; end;
tauron -> Jeg tænker mere på noget som String1 := String2 + String3, ikke som Integer1 := Integer2 + Integer3;
Som jeg også skrev, kan jeg sagtens selv skrive en funktion:
function AddArray(a, b: TNoteArray): TNoteArray; var I := Integer; begin Result := a; SetLength(Result, Length(Result) + Length(b)); for I := Length(a) to High(Result) do Result[I] := b[I - High(a)]; end;
afhængig af hvor meget du skal bruge din type kunne du overveje at lave din record om til en class med div. util funtioner, eller evt. kigge på delphi's TCustomVariantType
Lukker, det er åbenbart ikke muligt at gøre det jeg vil med et dynamisk array. Jeg har valgt at bruge TList i stedet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.