Keeping track of a list by comparing it.
Due to my last application developed, I had to compare a list by scanning it and then present the results by including if any item was added or removed. For accomplish this task I've developed a little unit that is able to compare the list and show the results in a TMemo.
//@Author Jordi Coll
//@2010
unit uListCompare;
interface
uses
Classes, SysUtils;
type
TListCompare = class(TObject)
private
FList2: TStringList;
FList1: TStringList;
procedure SetList1(const Value: TStringList);
procedure SetList2(const Value: TStringList);
public
property List1: TStringList read FList1 write SetList1;
property List2: TStringList read FList2 write SetList2;
constructor Create();
destructor Destroy(); override;
procedure DumpList();
function ExistInList1(s: string): boolean;
function ExistInList2(s: string): boolean;
end;
implementation
{ TListCompare }
constructor TListCompare.Create;
begin
FList1 := TStringList.Create;
FList2 := TStringList.Create;
end;
destructor TListCompare.Destroy;
begin
FreeAndNil(FList1);
FreeAndNil(FList2);
inherited;
end;
procedure TListCompare.DumpList;
var
i: Integer;
begin
if List2.Count = 0 then
begin
for i := 0 to List1.Count - 1 do
begin
List2.Add(List1[i]);
log('New Item ->' + List1[i]);
end;
end
else
begin
for i := 0 to List1.Count - 1 do
begin
if not ExistInList2(List1[i]) then
log('New Item ->' + List1[i]);
end;
for i := 0 to List2.Count - 1 do
begin
if not ExistInList1(List2[i]) then
log('Item doesn''t exist ->' + List2[i]);
end;
List2.Clear;
for i := 0 to List1.Count - 1 do
List2.Add(List1[i]);
end;
end;
function TListCompare.ExistInList1(s: string): boolean;
var
found: boolean;
i: Integer;
begin
i := 0;
found := false;
while (i < FList1.Count) and (not found) do
begin
found := FList1[i] = s;
inc(i);
end;
result := found;
end;
function TListCompare.ExistInList2(s: string): boolean;
var
found: boolean;
i: Integer;
begin
i := 0;
foundt := false;
while (i < FList2.Count) and (not found) do
begin
foundt := FList2[i] = s;
inc(i);
end;
result := found;
end;
procedure TListCompare.SetList1(const Value: TStringList);
begin
FList1 := Value;
end;
procedure TListCompare.SetList2(const Value: TStringList);
begin
FList2 := Value;
end;
end.
The only thing you have to do is fill the List1 with your items and then execute the procedure DumpList that will dump the information from List1 to List2 and will compare it to show the differences. This object can be called in a thread or a controlled loop.
%20applied%20to%20Transformer%20models%20in%20machine%20learning.%20The%20image%20shows%20a%20neural%20networ.webp)

Comments
Post a Comment