![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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.sortTMyObject – посто хранитель url |
|
#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)
| ||