이 문제가 있습니다. 빈 목록 (0 개 요소)에서 시작합니다.이 요소에 요소가 있거나 없는지 확인하고 싶습니다. 이 레코드가 목록에없는 경우 목록에이 레코드를 추가하고 그렇지 않으면 목록의 요소를 업데이트합니다. 이 코드 작성 시도 :List and Contains method
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Generics.Collections, System.Generics.Defaults;
type
TDBStats = record
Comb: Integer;
Freq: Integer;
end;
TDBStatsList = TList<TDBStats>;
procedure Add(ODBStats: TDBStatsList; const Item: TDBStats);
var
rItem: TDBStats;
begin
rItem := Item;
rItem.Freq := 1;
oDBStats.Add(rItem);
end;
procedure Update(ODBStats: TDBStatsList; const Item: TDBStats; const Index: Integer);
var
rItem: TDBStats;
begin
rItem := Item;
Inc(rItem.Freq);
oDBStats[Index] := rItem;
end;
var
oDBStats: TDBStatsList;
rDBStats: TDBStats;
myArr: array [0..4] of integer;
iIndex1: Integer;
begin
try
myArr[0] := 10;
myArr[1] := 20;
myArr[2] := 30;
myArr[3] := 40;
myArr[4] := 10;
oDBStats := TList<TDBStats>.Create;
try
for iIndex1 := 0 to 4 do
begin
rDBStats.Comb := myArr[iIndex1];
if oDBStats.Contains(rDBStats) then
Update(oDBStats, rDBStats, oDBStats.IndexOf(rDBStats))
else
Add(oDBStats, rDBStats);
end;
// Check List
for iIndex1 := 0 to Pred(oDBStats.Count) do
Writeln(oDBStats[iIndex1].Comb:3, oDBStats[iIndex1].Freq:10);
finally
oDBStats.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
를하고이 결과를 반환해야합니다 :
10 2
20 1
30 1
40 1
50 1
을하지만,이 결과를 반환은 :
10 1
20 1
30 1
40 1
50 1
10 1
나는 문제에 대해 이해 : 내가 oDBStats를 사용할 때 rDBStats 요소가 목록에 포함되어 있으면 제어합니다 (rDBStats). 처음으로 그것을 발견하지 못했고 목록에 추가; 하지만 그것이 목록에 추가되면 1로 freq 필드를 업데이트합니다; 그래서 내가 freq = 0 인 rdbstats를 다시 확인하면 두 번째로 발견되지 않습니다. 이 문제를 해결할 수 있습니까? 나는 "빗"이라는 입력을받는 카운터가 있어야하며,이 "빗"이 목록에 있는지, 다른 레코드 필드의 값에서 부주의하는지 확인하고 싶습니다. 내가 목록에서 "빗"을 찾으면, 나는 freq 필드를 증가시키면서 업데이트합니다. 도움 주셔서 감사합니다.
임의로 선택한 유형 이름 때문에 코드를 읽기가 어렵습니다. 'TDBStats' 대신'TDBStatList'를 사용하고,'PDBStats' 대신'TDBStat'을 사용하십시오. – kludg
완료되었으므로 도움이 되었기를 바랍니다. –
'Freq' 필드 값은 또한'Contains' 메쏘드에서 테스트됩니다; rDBStats.Comb : = myArr [iIndex1]; 뒤에'rDBStats.Freq : = 1;'행을 추가하면 올바른 결과를 얻을 수 있지만 일반적인 해결책은 아닙니다. 당신은 당신의 목록에 대해 다른 비교자를 필요로합니다. – kludg