Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Free Pascal
»
FPC development
(Moderators:
FPK
,
Tomas Hajny
) »
A propose for TStringList.Find...
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
IRC channel
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
FpDebug breakpoint on "be...
by
440bx
[
Today
at 09:46:38 pm]
Poll: Watches and Display...
by
440bx
[
Today
at 07:13:51 pm]
Lazarus for Windows on aa...
by
msintle
[
Today
at 06:42:18 pm]
InstallAware Using Lazaru...
by
marcov
[
Today
at 04:46:46 pm]
Who is Indy mattias?
by
paweld
[
Today
at 04:17:53 pm]
[solved] how to get class...
by
Joanna
[
Today
at 03:53:05 pm]
I just released a commerc...
by
BrassGear
[
Today
at 03:17:28 pm]
Does anyone know why thes...
by
Laksen
[
Today
at 03:04:14 pm]
Database standards OR Am ...
by
gidesa
[
Today
at 02:37:56 pm]
How to: create DLL file f...
by
TRon
[
Today
at 02:26:53 pm]
A fairly simple sound sol...
by
paweld
[
Today
at 01:46:11 pm]
Demoscene The Champs Crac...
by
KodeZwerg
[
Today
at 01:45:18 pm]
Access violation when ope...
by
Чебурашка
[
Today
at 12:27:34 pm]
Step-into the field sette...
by
Martin_fr
[
Today
at 11:31:48 am]
Access violation when re-...
by
Chris Osborne
[
Today
at 11:31:25 am]
AI, NLP and CAI: Text Gen...
by
Dzandaa
[
Today
at 11:03:26 am]
dwindows for Android
by
PierceNg
[
Today
at 10:54:44 am]
create system unit from s...
by
Laksen
[
Today
at 10:53:57 am]
[Solved] Find child contr...
by
Joanna
[
Today
at 09:53:43 am]
FpDebug unexpected Assemb...
by
Marc
[
Today
at 08:46:38 am]
Offical launch of the 1 B...
by
Handoko
[
Today
at 07:59:07 am]
Big Numbers Math
by
iLya2IK
[
Today
at 07:13:20 am]
BUG REPORT: Unable to gen...
by
dbannon
[
Today
at 06:29:49 am]
what to do if my target M...
by
Laksen
[
Today
at 12:49:12 am]
For-in loop over constant...
by
ASerge
[
Today
at 12:36:09 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: A propose for TStringList.Find... (Read 2881 times)
edgarrod71
Jr. Member
Posts: 68
A propose for TStringList.Find...
«
on:
August 12, 2017, 01:28:27 am »
Code: Pascal
[Select]
[+]
[-]
function
TStringList
.
Find
(
const
S
:
string
;
out
Index
:
Integer
)
:
Boolean
;
var
L
,
R
,
I
:
Integer
;
CompareRes
:
PtrInt
;
begin
Result
:
=
false
;
Index
:
=-
1
;
if
Not
Sorted
then
Raise
EListError
.
Create
(
SErrFindNeedsSortedList
)
;
// Use binary search.
L
:
=
0
;
R
:
=
Pred
(
Count
)
;
// Count - 1;
if
L<
=
R
then
// while (L<=R) do
repeat
// repeat is 5-10% faster than while, so
I
:
=
L
+
(
R
-
L
)
shr
1
;
// div 2; shr is faster than div...
CompareRes
:
=
DoCompareText
(
S
,
Flist
^
[
I
]
.
FString
)
;
if
(
CompareRes>
0
)
then
L
:
=
Succ
(
I
)
;
// I+1; instead of adding, Succ or Pred only checks... so faster code.
else
begin
R
:
=
Pred
(
I
)
;
// I-1;
if
(
CompareRes
=
0
)
then
begin
Result
:
=
true
;
if
(
Duplicates<>dupAccept
)
then
L
:
=
I
;
// forces end of while loop
end
;
end
;
until
L>R
;
Index
:
=
L
;
end
;
Logged
marcov
Administrator
Hero Member
Posts: 11453
FPC developer.
Re: A propose for TStringList.Find...
«
Reply #1 on:
August 12, 2017, 01:44:43 am »
So where is the benchmark code to compare ?
Logged
RAW
Hero Member
Posts: 868
Re: A propose for TStringList.Find...
«
Reply #2 on:
August 12, 2017, 10:16:26 am »
If the normal TStringlist is too slow, then it should be no problem at all to find a good HashList...
There are several improved TStringlists and several HashLists out there...
Just pick one and play trial and error...
Logged
Windows 7 Pro (x64 Sp1) & Windows XP Pro (x86 Sp3).
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Free Pascal
»
FPC development
(Moderators:
FPK
,
Tomas Hajny
) »
A propose for TStringList.Find...
TinyPortal
© 2005-2018