AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Schnellstes Entfernen von Chars aus einem String?
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellstes Entfernen von Chars aus einem String?

Ein Thema von PeterPanino · begonnen am 29. Mär 2015 · letzter Beitrag vom 14. Apr 2015
Antwort Antwort
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:30

Getestet mit einem 256KiB großen Zufallsstring (bestehend aus 'a'..'z') und CharsToRemove mit 'a' und 'z':
Code:
mm1256  :  656ms
Popov   : 1359ms
Zacherl1:    0ms
Soeben auch verglichen...es kommt aber in Zacherl's Ergebnis nicht das selbe raus. Suche noch, woran es liegt

EDIT: So funktionierts tatsächlich am schnellsten:

Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var
  i: Integer;
  S: set of Char;
begin
  s := [];
  for i := 1 to Length(CharsToRemove)
  do S := S + [CharsToRemove[i]];
  Result := '';
  for i := 1 to Length(AStr) do
  if not CharInSet(AStr[i],S)
  then Result := Result + AStr[i];
end;
Und das Ergebnis stimmt auch

EDIT-2

ooops...Deddy's Variante ist noch schneller. 1 MB Text mit 3 Ersetzungen dauert nur ein paar Ticks....geil
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen

Geändert von mm1256 (29. Mär 2015 um 16:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Schnellstes Entfernen von Chars aus einem String?

  Alt 29. Mär 2015, 16:55
Hatte noch nen SetLength am Ende vergessen und mir ist wohl ein -1 bei der Schleife reingerutscht. So funktioniert es und ist sogar noch schneller als DeddyHs Version:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr: String; CharsToRemove: TSysCharSet): string;
var
  I, J: Integer;
begin
  SetLength(Result, Length(AStr));
  J := 1;
  for I := 1 to Length(AStr) do
  begin
    if (not (AStr[I] in CharsToRemove)) then
    begin
      Result[J] := AStr[I];
      J := J + 1;
    end;
  end;
  SetLength(Result, J - 1);
end;
100MiB String mit 2 Ersetzungen:
Code:
Zacherl : 641
DeddyH : 1578
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz