(Gast)
n/a Beiträge
|
AW: Zwei Listen filtern Denkproblem
28. Mai 2019, 12:50
Wie gesagt, abstrakt formuliert kommt man auf so etwas
Delphi-Quellcode:
program StadtVerwaltung;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Generics.Defaults,
System.Generics.Collections;
type
TArray = class(System.Generics.Collections.TArray)
public
class function &Intersect<T>( const A, B: array of T): TArray<T>; overload;
class function &Intersect<T>( const A, B: array of T; const AComparer: IEqualityComparer<T>): TArray<T>; overload;
end;
{ TArray }
class function TArray.Intersect<T>( const A, B: array of T; const AComparer: IEqualityComparer<T>): TArray<T>;
var
vA, vB: T;
begin
Result := [];
for vA in A do
begin
for vB in B do
begin
if AComparer.Equals(vA, vB) then
begin
Result := Result + [vA];
Break;
end;
end;
end;
end;
class function TArray.Intersect<T>( const A, B: array of T): TArray<T>;
begin
Result := Intersect<T>(A, B, TEqualityComparer<T>. Default);
end;
procedure Main;
var
A, B, vBArr: TArray< string>;
idx: Integer;
begin
A := [' a', ' b', ' c', ' d'];
B := [' a,b', ' a,e,d'];
for idx := Low(B) to High(B) do
begin
vBArr := B[idx].Split([' ,']);
vBArr := TArray.Intersect< string>(vBArr, A);
B[idx] := String.Join(' ,', vBArr);
end;
end;
begin
try
{ TODO -oUser -cConsole Main : Code hier einfügen }
Main;
except
on E: Exception do
Writeln(E.ClassName, ' : ', E. Message);
end;
Readln;
end.
PS Ja, ich weiß, dass es sich hier nicht wirklich um die Schnittmenge handelt und somit die Methode anders benannt werden müsste
Geändert von Schokohase (28. Mai 2019 um 12:53 Uhr)
|
|
Zitat
|