![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день. Есть четыре компонента:
1. Строка, содержит текстовый файл(точнее текстовая часть ХТМЛ-страницы) 2. Строка, содержит несколько слов (слова поиска) 3. Рейтинг(число), результат работы функции function Index(const S1,S2:string; A:integer):integer; 4. Строка - URL из которого получена ХТМЛ-страница По ходу работы программы получается пара "рейтинг - УРЛ", текстовый файл и слова поиска УЖЕ не важны необходимо эти пары (сотни а то и тысячи строк) отсортировать по возрастанию(или убыванию), по значению Рейтинг(число), причем после сортировки Рейтинг тоже уже не нужен. в конечном варианте нужны только строки УРЛ, отсортированные по Рейтингу Вопрос: какими способами можно все это сделать? первое что приходит на ум это TStringList, там есть пары, но сам пока еще пробовал. возможно кто то что то знает, уже? |
#2
|
|||
|
|||
![]() я бы сделал так
Код:
StringList.AddObject('0000050', TMyObject.create(url)) //... StringList.sort TMyObject – посто хранитель url >woweook< |
#3
|
||||
|
||||
![]() Цитата:
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
![]() есть две переменные. в одной число(рейтинг), в другой строка(УРЛ)
нужно их как то совместно сохранить (пара), потом в накопитель добавится еще несколько сот а может тысяч таких пар, после чего эти тыщщи пар нужно отсортировать по значению ЧИСЛО |
#5
|
||||
|
||||
![]() Код:
var AStringList: TStringList; function Compare(List: TStringList; Index1, Index2: Integer): Integer; begin if Integer(List.Objects[Index1])>Integer(List.Objects[Index2]) then Result:=1 else if Integer(List.Objects[Index1])<Integer(List.Objects[Index2]) then Result:=-1 else Result:=0; end; begin AStringList:=TStringList.Create; AStringList.AddObject('http://www.apple.com/', Pointer(50)); AStringList.AddObject('http://www.intorned.com/', Pointer(100)); AStringList.AddObject('http://www.microsoft.com/', Pointer(75)); AStringList.AddObject('http://www.ubuntu.com/', Pointer(25)); AStringList.CustomSort(@Compare); Memo1.Lines.Assign(AStringList); AStringList.Free; end; Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 27.07.2012 в 15:31. |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Pcrepair (27.07.2012)
|
#6
|
|||
|
|||
![]() вот что получилось в результате, правда пришлось ввести ГлобПерем в качестве буфера. некоторые считают что так неправильно. сразу встречный вопрос - как правильно?
Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button2: TButton; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Buffer:TStringList; (*ГлобПерем для хранения строк-пар*) implementation {$R *.dfm} (*=======================================================*) (* 28 июля 2012г. сортировка пары текст=число*) (* ПРОЦ накопление строк в буфере*) procedure TForm1.Button1Click(Sender: TObject); var T1: TStringList; Text:string; Number:integer; (* встроенная в процедуру функция. сшивает две ПЕРЕМ в одну *) function AddUrl(const A:string; const B:integer):TStringList; begin AddUrl:=TStringList.Create; AddUrl.AddObject(Text,Pointer(Number)); end; (*ввод пар в накопитель*) begin T1:=TStringList.Create; Number:=StrToInt(Edit1.Text); (*ввод числа*) Text:=Edit2.Text; (*ввод текста*) T1:=AddUrl(Text,Number); (*сборка двух ПЕРЕМ в одну*) Buffer.AddStrings(T1); (*накопление строк в ГлобПерем*) Memo1.Text:=Buffer.text; (*контроль*) T1.Free; end; (*=====================================================*) (*=====================================================*) (* ПРОЦ сортировка строк из ГлобПерем*) procedure TForm1.Button2Click(Sender: TObject); var T: TStringList; function Compare(List: TStringList; Index1, Index2: Integer): Integer; begin if Integer(List.Objects[Index1])>Integer(List.Objects[Index2]) then Result:=-1 (* сейчас сортировка - максимум наверху, если 1 а далее -1 тогда наверху минимум*) else if Integer(List.Objects[Index1])<Integer(List.Objects[Index2]) then Result:=1 else Result:=0; end; begin T:=TStringList.Create; T.AddStrings(Buffer); (*ввод накопленных пар*) T.CustomSort(@Compare); (*сортировка от 1 до максимума*) Memo2.Lines.Assign(T); (*контроль*) T.Free; end; (*====================================================*) (*инизиализация буфера при запуске программы*) procedure TForm1.FormCreate(Sender: TObject); begin Buffer:=TStringList.Create; end; end. |
#7
|
|||
|
|||
![]() Цитата:
Код:
type TForm1 = class(TForm) ... private { Private declarations } FBuffer: TStringList; (*Поле класса TForm1 для хранения строк-пар*) public { Public declarations } end; |
Этот пользователь сказал Спасибо MiraLaklamon за это полезное сообщение: | ||
Pcrepair (28.07.2012)
|