![]() |
If Abfragen für verschiedene CheckBoxen optimieren
Hallo,
In einem anderen Thread habe ich bereits gefragt, wie ich die for-Schleife meines Dublettenprüfprogramms optimieren kann. ( ![]() Das Programm soll jetzt so erweitert werden, dass man auf der Oberfläche über Checkboxen die zu vergleichenden Felder auswaehlen kann (Name, Str,Ort, etc). Der Aufbau sieht derzeit so aus, dass die Dubleteten in einer Funktion nach der Levenshtein Distance verglichen werden (function ZmergeStrings). Umstaendlich erscheint mir aber, dass ich bei jedem Vergleich den Status der Checkboxen erneut abfrage. Welches ist die beste Methode diese unnoetigen Abfragen zu ersetzten? Gruß Wolfram Ps: Gibt es eine Rekursive möglichkeit, die beiden for-schleifen zu ersetzen?
Delphi-Quellcode:
procedure Vergleiche(zfactorT: integer);
var x,y,t: integer; tmp: boolean; begin for x := 1 to SizeOfTable-1 do begin for y := x+1 to SizeOfTable do begin t := 0; if (checkname1.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_name1), lowercase(ZFinalArray[y].ZBP_name1),ord(checkmax.checked)); if (checkname2.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_name2), lowercase(ZFinalArray[y].ZBP_name2),ord(checkmax.checked)); if (checkstreet.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_street), lowercase(ZFinalArray[y].ZBP_street),ord(checkmax.checked)); if (checkpostcode.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_postcode), lowercase(ZFinalArray[y].ZBP_postcode),ord(checkmax.checked)); if (checkcity.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_city1), lowercase(ZFinalArray[y].ZBP_city1),ord(checkmax.checked)); if (checkemail.Checked = true) then t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_email), lowercase(ZFinalArray[y].ZBP_email),ord(checkmax.checked)); if ((t <= zfactorT) and ... then begin ZFinalArray[y].ZBP_dublette := true; ... ... |
Re: If Abfragen für verschiedene CheckBoxen optimieren
Zitat:
Delphi-Quellcode:
Um die Performance zu steigern kannst du die Zustände der Checkboxen auf auf Boolean-Variablen kopieren
if checkstreet.Checked then // ohne Klammern und Vergleich mit True gehts auch
und diese dann abfragen, aber der Zeitgewinn wird sich kaum bemerkbar machen. Der Wert für den Ausdruck ord(checkmax.checked) sollte einmal ausserhalb der Schleifen berechnet werden. Zitat:
in der Praxis versucht man aber immer den rekursiven Algo durch Tranformation in einen (schnelleren) nichtrekursiven Algo zu verwandelt. |
Re: If Abfragen für verschiedene CheckBoxen optimieren
Tipp 1: Mach auf ZFinalArray ein zweidimensianales Array, also wird aus name 1, aus name2 2, aus street 3, usw.
Delphi-Quellcode:
Tipp 2: Geb den Ceckboxen Namen mit Ziffern, z.B. checkbox1 bis checkbox6
ZFinalArray: array of array of String;
Tipp 3:
Delphi-Quellcode:
procedure Vergleiche(zfactorT: integer);
var x,y,t,z: Integer; tmp: boolean; begin for x := 1 to SizeOfTable-1 do for y := x+1 to SizeOfTable do begin t := 0; for z:=1 to 6 do if (findcomponent('checkbox'+inttostr(z)) as TCheckbox).Checked then t := t + ZmergeStrings(lowercase(ZFinalArray[x,z]), lowercase(ZFinalArray[y,z]),ord(checkmax.checked)); if ((t <= zfactorT) and ... then begin ZFinalArray[y,7]:='true'; ... end; ... end; ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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