Als ich habe ein Programm was Dateien vergleicht, damit dieses nicht zu langsam wird wurde mir gesagt das ich eine Hash-table anlegen soll!
Nun meine simple Frage kann mir jemand mal etwas dazu erklären!
HAbe diesen Code im Internet gefunden, blicke jedoch nicht ganz durch wie ich meine Procedure Arefilesequal,
Delphi-Quellcode:
Function AreFilesEqual( Const file1, file2: String ): Boolean;
Var
m1, m2: TMemoryStream;
Begin
Result := False;
m1 := TMemoryStream.Create;
try
m1.LoadFromFile( file1 );
m2:= TMemoryStream.Create;
try
m2.LoadFromFile( file2 );
If m1.size = m2.size Then
Result := CompareMem( m1.Memory, m2.memory, m1.size );
finally
m2.free;
end;
finally
m1.free;
end
End;
mit diesem Code in verbindung setzen kann oder bin ich da auf dem Holzweg? Im Forum habe ich nichts gefunden und im bei google keine befriedigende Erklärung!
Delphi-Quellcode:
program hash1_2;
uses
simpleHash
in '
simpleHash.pas';
const
cHexChars:
array [0..15]
of char = '
0123456789abcdef';
cNullStr: PChar = '
00000000';
function hexStr(i: cardinal):
string;
var n: integer;
begin
if i=0
then
result:='
0'
else begin
setString(result,cNullStr,8);
n:=8;
while (i>0)
do begin
result[n]:=cHexChars[i
and $f];
i:=i
shr 4;
dec(n);
end;
for n:=1
to 8
do
if result[n]<>'
0'
then begin
delete(result,1,n-1);
exit;
end;
end;
end;
var h: TStringHash; n, Count, i: cardinal; code: integer; s:
string;
begin
n :=1;
if ParamCount=1
then
Val(ParamStr(1),n,code);
h:=TStringHash.Create;
for i:=1
to n
do
h.add(hexStr(i),i);
count:=0;
for i:=1
to n
do begin
str(i,s);
if h.get(s)<>
nil then inc(Count);
end;
h.Destroy;
writeln(Count);
end.
Da ich bis vor kurzen rein garnichts vom Hashen wusste, wäre ich sehr dankbar für jede Hilfestellung!
DAnke im Vorraus!