powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как создать массив из массивов записей разного типа
15 сообщений из 15, страница 1 из 1
Как создать массив из массивов записей разного типа
    #39884974
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько массивов записей такого вида:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
type
 rec1 = record
   A, B: string;
 end;
rec1Arr = array of rec1;

type
 rec2 = record
   C, D: string;
 end;
rec2Arr = array of rec2;

type
 rec3 = record
   E, F: string;
 end;
rec3Arr = array of rec3;



Мне нужно объединить массивы rec1Arr, rec2Arr, rec3Arr в единый массив, чтобы из него можно было обращаться к внутренним массивам по индексам, например GlobalArr[0].A:= 'hello';
Подскажите как это сделать?
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39884977
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garun
например GlobalArr[0].A:= 'hello';

ошибочка, хотел сказать как-то так: GlobalArr[0][10].A:= 'hello';
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39884980
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понятно, что конкретно нужно, уточняй
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39884981
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonне понятно, что конкретно нужно,По идее ему нужен вариативный record. Но со строками будет облом
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39884990
Денис Читатель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
type
 GlobalA= record
   A: rec1;
   B: rec2;
   C: rec3;
 end;
GlobalArr= array of GlobalA;
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885013
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как насчет трех волшебных слов: инкапсуляция, наследование, полиморфизм ?

Сделай базовый класс, три потомка и массив экземпляров базового класса.
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885020
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
type
  rec1 = record
    A, B: string;
  end;
  rec1Arr = array of rec1;

  rec2 = record
    C, D: string;
  end;
  rec2Arr = array of rec2;

  rec3 = record
    E, F: string;
  end;
  rec3Arr = array of rec3;

  TMyRec = record
    type
      TAll = record
        A,B,C,D,E,F : string;
      end;
  private
    function GetAll(Index: integer): TAll;
    procedure SetAll(Index: integer; const Value: TAll);
  public
    R1: rec1Arr;
    R2: rec2Arr;
    R3: rec3Arr;

    property All[Index: integer]: TAll read GetAll write SetAll; default;
  end;

{ TMyRec }

function TMyRec.GetAll(Index: integer): TAll;
begin
  Result.A:=R1[index].A;
  Result.B:=R1[index].B;
  Result.C:=R2[index].C;
  Result.D:=R2[index].D;
  Result.E:=R3[index].E;
  Result.F:=R3[index].F;
end;

procedure TMyRec.SetAll(Index: integer; const Value: TAll);
begin
  if Length(R1)<=Index then SetLength(R1,Index+1);
  if Length(R2)<=Index then SetLength(R2,Index+1);
  if Length(R3)<=Index then SetLength(R3,Index+1);
  R1[index].A:=Value.A;
  R1[index].B:=Value.B;
  R2[index].C:=Value.C;
  R2[index].D:=Value.D;
  R3[index].E:=Value.E;
  R3[index].F:=Value.F;
end;


procedure Test;
var
  Arr : TMyRec;
  Rec : TMyRec.TAll;
begin
  Rec.A:='1';
  Rec.B:='2';
  Rec.C:='3';
  Rec.D:='4';
  Rec.E:='5';
  Rec.F:='6';
  Arr[1]:=Rec;
  Writeln(Arr[1].A,',',Arr[1].B,',',Arr[1].C,',',Arr[1].D,',',Arr[1].E,',',Arr[1].F);
end;



И вот, поддержите еще:

https://quality.embarcadero.com/browse/RSP-22953
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885029
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatИ вот, поддержите еще:

https://quality.embarcadero.com/browse/RSP-22953 А как ты себе это представляешь?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
TMyRec = record
  x: Integer;
  y: Integer;
end;

TMyClass = class
private
  FRec: TMyRec;
  procedure SetRec(const ARec: TMyRec);
public
  property Rec: TMyRec read FRec write SeRec;
end;

procedure TMyClass.SetRec(const ARec: TMyRec);
begin
  if ARec.x > ARec.y then
    raise EInvalidArgument.Create;
  FRec := ARec;
end;

var
  LClass: TMyClass;

LClass.Rec.x := 100;
LClass.Rec.y := 0;

куда вешать проверку?
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885031
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

На SeRec, как ты и сделал.

Вообще при присваивании рекорда в пропертях по логике должны дергатся и геттер и сеттер.
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885032
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О блин, привык что редактировать нелья. ;)
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885034
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
If record property have getter and/or setter functions then they could be called automatically.

Код: pascal
1.
c.MyRec.x:=1;


would be equivalent to

Код: pascal
1.
2.
3.
var temp:=c.GetMyRec;
Temp.x:=1;
c.SetMyRec(Temp);


Вариант раз
Код: pascal
1.
property Rec: TMyRec write SetRec;

геттера нет вообще.

Вариант 2 - очень тяжелый геттер или геттер меняющий внутреннее состояние. Зачем мне лишний вызов?
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885035
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatВообще при присваивании рекорда в пропертях по логике должны дергатся и геттер и сеттер.И кому такое счастье нужно?
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885037
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
геттера нет вообще.

Нету - не дергается.

Вариант 2 - очень тяжелый геттер или геттер меняющий внутреннее состояние. Зачем мне лишний вызов?
Удобство. Кода меньше гораздо.
Не нравится что он тяжелый - не пользуйся.

Можешь как сейчас "сэкономить" такты через поинтер.
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885038
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
И кому такое счастье нужно?

Всем кто с рекордами через проперти работает.
...
Рейтинг: 0 / 0
Как создать массив из массивов записей разного типа
    #39885289
Фотография garun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Благодарю!!!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как создать массив из массивов записей разного типа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]