Einzelnen Beitrag anzeigen

Benutzerbild von LoCrux
LoCrux

Registriert seit: 5. Mär 2007
Ort: Gwang-Yang-City
48 Beiträge
 
Delphi 2009 Enterprise
 
#2

Re: Mehere Elemente eines Feldes löschen durch überschreiben

  Alt 22. Nov 2007, 01:53
Hi Lotus,

vielleicht hilft es Dir:

Delphi-Quellcode:
type
  TCharArray = array of Char;
  TByteArray = array of Byte;

function Kill(const Kill:Char;const StrArr:TCharArray):TCharArray;
var
  i,Count : Word;
  ToKill : Byte;
  tempByteArr : TByteArray absolute StrArr;
begin
  ToKill := ORD(Kill);
  Count := 0;
  for i := Low(StrArr) to High(StrArr)
  do begin
    if (tempByteArr[i]<>ToKill)
    then begin
      INC(Count);
      SetLength(result,Count);
      result[count-1] := StrArr[i];
    end;
  end;
end;

function KillAndFill(const Kill,Fill:Char;const StrArr:TCharArray):TCharArray;
var
  i : Word;
  ToKill : Byte;
  tempByteArr : TByteArray absolute StrArr;
begin
  ToKill := ORD(Kill);
  SetLength(result,High(StrArr)+1);
  for i := Low(StrArr) to High(StrArr)
  do begin
    if (tempByteArr[i]<>ToKill)
    then result[i] := StrArr[i]
    else result[i] := Fill;
  end;
end;
Frage vorweggenommen:

tempByteArr : TByteArray absolute StrArr zeigt auf den gleichen Bereich im Speicher, wie auch const StrArr:TCharArray. Die vergleichsoperation (tempByteArr[i]<>ToKill) wird vom Compiler (da jetzt ein definierter Byte-Vergleich) viel effizenter umgesetzt. Kann bei vielen aufrufen der Funktion von Vorteil sein.

Kill : Loescht und gibt ein kuerzeres Array zurueck.
KillAndFill : Ersetzt.
“C++ is an insult to the human brain.” [Niklaus Wirth]

2B OR NOT 2B (.. THAT IS FF)
  Mit Zitat antworten Zitat