![]() |
Array-Sortierung mit großen Zahlen - oder nich?
Hi Leute,
das Problem ist schon überall durch - trotzdem steig ich nich durch... :gruebel: Es geht darum: Ich muss/soll/darf :wiejetzt: ein HTML-Analyse-Programm schreiben! :???: Dazu gehört ein Ranking-Tool, bei dem ich analysiere, ob ein Wort im <title>, etc. steht. Dabei schreibe ich die Wörter in ein array of string called asKey, die Anzahl davon in ein integer called as iAnzahl. Je nach dem wo das Wort gefunden worden ist, bekommt es Punkte, die im array of integer aiPoints stehen. Wenn jetzt z.B. das Wort "Schokoladen-Bällchen mit Marzipangeschmack" ( :kotz: ) im Titel vorhanden ist, dann bekommt er 5 Pt. Sprich:
Delphi-Quellcode:
So, soweit alle alles verstanden? Ja? Cool. :feuerchen:
aiAnzahl:=(iAnzahl+1);
SetLength(asKey,iAnzahl); SetLength(aiPoints,iAnzahl); asKey[(iAnzahl-1)]:='Schokoladen-Bällchen mit Marzipangeschmack'; aiPoints[(iAnzahl-1)]:=5; Ich :arrow: :angel: will jetz also lustigerweise es so hinkriegen, dass ich beim Beschreiben der Listbox liRanking das Item mit der höchsten Punktanzahl ganz oben stehen habe und das ganze sortiert bödde :mrgreen: Muss ich das Array sortieren oder wie oder was? Ich hab irgendwie 'n Blackout und komm ned drauf. :wall: MfG Markus. :coder: |
Re: Array-Sortierung mit großen Zahlen - oder nich?
Hi,
ich schätze mal dein Problem dürfte sein, dass du beim sortieren die Zuordnung von Anzahl-String verlierst. Natürlich kannst du hier umständlich versuchen beide Listen synchron zu halten, ich denke es ist aber einfacher wenn du eine Klasse verwendest, die ein Tupel von Anzahl und Bezeichnung speichert. Hier kannst du dann statt auf ein Array auch auf eine TObjectList zurückgreifen (intern wird wieder ein Array verwendet). Da hast du dann gleich zwei Vorteile:
Der Letzte Punkt ist dann wohl für dich interessant. Da gibt es die Funktion Sort, die einfach den Quicksort implementiert. Der musst du allerdings noch eine Funktion übergeben, die den Vergleich vornimmt. Dabei kannst du dann einfach schauen, wo die Anzahl höher ist und einen entsprechenden Wert zurückgeben (Details siehe OH). Gruß Der Unwissende |
Re: Array-Sortierung mit großen Zahlen - oder nich?
Sry, ich steig nich mit dem Sort durch... :gruebel:
ne besseR: ALLGEMEIN |
Re: Array-Sortierung mit großen Zahlen - oder nich?
Liste der Anhänge anzeigen (Anzahl: 1)
Herzlich willkommen in der Delphi-PRAXiS, Markus.
Die Zuordnung von Wort und Punktezahl kannst du auch ganz einfach mit der Allzweckwaffe TStringList machen. Die Punktezahl wird dabei einfach im Objects-Array der StringList mitgeführt.
Delphi-Quellcode:
Das Sortieren ist dann auch nicht sooo schwer:
procedure Analyze(const s: String; weight: Integer; words: TStringList);
var i, iStart, iWord: Integer; inWord: Boolean; sWord: String; begin iStart := 0; for i := 1 to Succ(Length(s)) do begin inWord := (i <= Length(s)) and (s[i] in ['a'..'z', 'A'..'Z', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß']); if (iStart = 0) and inWord then iStart := i; if not inWord and (iStart > 0) then begin sWord := Copy(s, iStart, i - iStart); iStart := 0; iWord := words.IndexOf(sWord); if iWord <> -1 then words.Objects[iWord] := Pointer(Integer(words.Objects[iWord]) + weight) else words.AddObject(sWord, Pointer(weight)); end; end; end;
Delphi-Quellcode:
Verwenden kannst du die Routinen dann so:
function CompareInteger(i1, i2: Integer): Integer;
begin if i1 < i2 then Result := -1 else if i1 > i2 then Result := 1 else Result := 0; end; function CompareItems(list: TStringList; index1, index2: Integer): Integer; begin Result := CompareInteger(Integer(list.Objects[index2]), Integer(list.Objects[index1])); end;
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TMainForm.AnalyzeButtonClick(Sender: TObject);
begin WordList.Clear; with WebBrowser.Document as IHTMLDocument2 do begin Analyze(title, 5, WordList); Analyze(body.innerText, 1, WordList); end; WordList.CustomSort(CompareItems); ShowRanking(WordList); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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