Судя по this post и this post, я хотел бы предложить следующее:
unit MyAssignment;
interface
type
TValueKind = (EconomicGrowth,
Inflation,
Unemployment,
CurrentAccountPosition,
AggregateSupply,
AggregateDemand,
ADGovernmentSpending,
ADConsumption,
ADInvestment,
ADNetExports,
OverallTaxation,
GovernmentSpending,
InterestRates,
IncomeTax,
Benefits,
TrainingEducationSpending);
TValue = record
NewValue,
OldValue,
SavedValue : Double;
procedure SetValue(aVal : Double);
procedure SaveValue();
procedure RestoreValue();
end;
TDataArray = array [TValueKind] of TValue;
var
Data : TDataArray;
implementation
{TValue}
procedure TValue.SetValue(aVal : Double);
begin
OldValue := NewValue;
NewValue := aVal;
end;
procedure TValue.SaveValue;
begin
SavedValue := NewValue;
end;
procedure TValue.RestoreValue;
begin
NewValue := SavedValue;
OldValue := SavedValue;
end;
end.
Теперь вы можете написать такой код:
//accessing the values :
// Data[XX] instead of Data.XX
//examples :
ShowMessage(FloatToStr(Data[Inflation].SavedValue));
Data[AgregateSupply].SetValue(10.0);
Data[Benefits].SaveValue;
//writing loops :
procedure RestoreValues(var aData : TDataArray); //the "var" keyword is important here : google "arguments by value" "arguments by reference"
var
lKind : TValueKind;
begin
for lKind := Low(TValueKind) to High(TValueKind) do
aData[lKind].RestoreValue;
end;
procedure SaveValues(var aData : TDataArray);
var
lKind : TValueKind;
begin
for lKind := Low(TValueKind) to High(TValueKind) do
aData[lKind].RestoreValue;
end;
//calling these functions :
SaveValues(Data);
RestoreValues(Data);
Если вам нужны более сложные манипуляции на массиве было бы неплохо поместить его в класс - замените поля, которые вы написали, только на efield типа TDataArray, - и напишите функции для управления данными как методы этого класса.
Sory ... Я не понимаю. Можете ли вы объяснить мне, почему для этого недостаточно классического цикла? Что-то вроде для I: = 0 до Data.Count делать начинают данные [I] .NewValue: = Data [I] .SavedValue; Данные [I] .OldValue: = Данные [I] .SavedValue; конец; С наилучшими пожеланиями. – jachguate