szybciej niz copy()

0

taka rzecz mnie zastanawia:

czy lepiej zrobic

copy(JakisString, 2, length(JakisString)-2);

czy moze

JakisString[1] := #0;
JakisString[length(JakisString)] := #0;

a moze

delete(JakisString,1,1);
delete(JakisString,length(JakisString)-1,1)

ktora z tych metod bedzie najszybsza?
mam 12634219318715623987642 ;-) wartosci do przyciecia
i chcialbym zrobic to optymalnie...

pozdrawiam

0

Chyba najlepiej jest sposoben trzecim, czyli funkcją Delete ;]

0
Johny_Morfina napisał(a)

czy moze

JakisString[1] := #0;
JakisString[length(JakisString)] := #0;

Ten sposób na pewno odpada.

0

Jeśli używasz łańcuchów o zadeklarowanej długości (String[n]) to możesz użyć

s[0] := Chr(Length(s)-2);

Jeśli nie, to najlepszym rozwiązaniem będzie Delete. W końcu do tego służy.

Są jeszcze jakieś moduły do szybkich operacji na tekstach np. QStrings wydumane przez jakiegoś Rosjanina, ale nie wiem czy jest darmowe i aktualizowane (ostatnią wersję widziałem z 2001 roku).

0

@pelsta
tez tak mysle, ale przydaloby sie uzasadnienie.

@Tajemniczy
jakies uzasadnienie?

@hes
czy na pewno?
trzeba bedzie uzyc go (tego delete) 2 razy.

przypomne (albo sprecyzuje) ze chodzi o usuniecie pierwszej i ostatniej literki (a konkretnie cudzyslowow) ze stringa.

na razie uzywam copy()

0
Johny_Morfina napisał(a)

@pelsta
tez tak mysle, ale przydaloby sie uzasadnienie.

A co Ci zostanie po operacji JakisString[1] := #0?

Możnaby jeszcze spróbować StringReplace jeżeli w środku nie ma cudzysłowiów.

0

Jeśli na jednym łańcuchu chcesz wykonać wiele operacji, np.: wyciągnąć z całego łańcucha kilka ciągów znaków to zastosuj: DELETE.

Jeśli zamierzasz tylko wyciągnąć jeden ciąg znaków, lepiej zastosować COPY.

A operację będziesz wykonywał w tej samej funkcji/procedurze czy poprzez wywołanie inne funkcji (jeśli tak to ważne jest "przekazywanie parametrów przez stałą") ?

0

Rzeczywiście przeoczyłem fakt, że usuwasz 2 znaki w różnych miejscach Stringa ale zaintrygowałeś mnie tym pytaniem więc musiałem sprawdzić. Oto wyniki programu, który w pętli wykonywanej 1mln razy generuje losowe Stringi i wykonuje na nich operacje (D2007, Proc:2x2,1Ghz):

String - 10 znaków:

Copy - 160 ms
2x Delete - 140 ms
2x Q_Delete - 119 ms

String - 20 znaków:

Copy - 190 ms
2x Delete - 185 ms
2x Q_Delete - 160 ms

String - 50 znaków:

Copy - 360 ms
2x Delete - 332 ms
2x Q_Delete - 310 ms

String losowej długości 2-50 znaków:

Copy - 294 ms
2x Delete - 285 ms
2x Q_Delete - 267 ms

QStrings: http://www.torry.net/authorsmore.php?id=2364

1 użytkowników online, w tym zalogowanych: 0, gości: 1