![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день,
у меня такая проблема есть программа написанная по принципам ооп(структура динамическая очередь упорядоченных массивов) в ней есть 3 класса(1 "стринговый" класс с 2 свойствами,2 класс на базе массива с 1св. и 3 на базе очереди тоже с 1 свт.)- собственно сама проблема:не совсем понимаю как правильно реализовать поиск и удаление элемента по названию из массива (не по индексу,название естественно string'вое) Вот проблемный кусок кода(если надо могу выложить весь код класса массива) Код:
function TSection.FindNews(_NewsName: string):string;
var
i:byte;
begin
for i:=1 to GetCount do
if NewsArray[i].GetTitleName = _NewsName Then
begin
Result :=i;
Exit;
end;
Result := 0;
end;
function TSection.DeleteNews(_NewsName:string): boolean;
var
i,tmp: Byte;
begin
Result := False;
if count <> 0 then
begin
tmp := FindNews(_NewsName:string);
if tmp <> 0 then
begin
for i:=tmp to Count-1 do NewsArray[i] := NewsArray[i+1];
NewsArray[Count] := nil;
Dec(Count);
Result := True;
end;
end;
end;
|
|
#2
|
||||
|
||||
|
Код:
NewsArray |
|
#3
|
|||
|
|||
|
NewsArray:string; массив строк по сути
Код:
const MaxNews = 10; type MyArray = array [1..MaxNews] of TNews; закладываются подозрения что преподаватель явно что то напутал,так как везде удаление по индексу (нашел удаление по названию только в списке TStrList) |
|
#4
|
||||
|
||||
|
Нет ли смысла перестроить NewsArray в TStringList.
И пользоваться адекватным удалением. Если TNews это стринг. Или использовать <TNews>List generic collection. |
|
#5
|
|||
|
|||
|
Если перестрою NewsArray в TStringList это уже будет список.
Удаление по названию в списке я понимаю(даже нашел примеры) ,но как это реализовать в массиве.... |
|
#6
|
||||
|
||||
|
Цитата:
Отрывок из Classes.pas: Код:
...
TStringItem = record
FString: string;
FObject: TObject;
end;
PStringItemList = ^TStringItemList;
TStringItemList = array of TStringItem; // Обычный массив
TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
TStringList = class(TStrings)
private
FList: TStringItemList; // тут он и используется
... |
|
#7
|
|||
|
|||
|
вот что получилось(реализация класса неполная):
interface Код:
uses
News,SysUtils;
const
MaxNews = 10;
type
TStringItemList = array [1..MaxNews] of TNews;
TSection=class
public
constructor Create(_SectionName:string;_NewsName:string);
function DeleteNews(_NewsName: string): boolean;
function FindNews(_NewsName: string): string;
private
NewsList:TStringItemList;
SectionName: String;
NextSection: TSection;
Count: Integer;
end;
implementation
constructor TSection.Create;
begin
NextSection := nil;
Count := 0;
end;
function TSection.FindNews(_NewsName: string):string;
var
i:byte;
begin
for i:=1 to GetCount do
if NewsList[i].GetTitleName = _NewsName Then
begin
Result :=i;
Exit;
end;
Result := 0;
end;
function TSection.DeleteNews(_NewsName:string): boolean;
var
i: Byte;
Lst:TStringItemList;
begin
Result := False;
if count <> 0 then
begin
Lst := FindNews(_NewsName:string);
if Lst:=NewsName then
begin
for i:=Lst[index] to Count-1 do NewsList[i] := NewsList[i+1];
NewsList[Count] := nil;
Dec(Count);
Result := True;
end;
end;
end;//если есть ошибки исправьте если несложно,заранее спасибо |
|
#8
|
||||
|
||||
|
Вы вот мне скажите, у вас без ошибок сия функция компилится и выполняется?
Код:
function TSection.FindNews(_NewsName: string):string;
var
i:byte;
begin
for i:=1 to GetCount do
if NewsList[i].GetTitleName = _NewsName Then
begin
Result :=i;
Exit;
end;
Result := 0;
end; |
|
#9
|
||||
|
||||
|
Ну нафига из класса делать список? Вам уже указали на StringList, вы же опять огород городите.
Код:
TSection=class
public
constructor Create(_SectionName:string;_NewsName:string);
function DeleteNews(_NewsName: string): boolean;
function FindNews(_NewsName: string): string;
private
NewsList:TStringItemList;
SectionName: String;
NextSection: TSection; // ???
Count: Integer;
end; |
|
#10
|
|||
|
|||
|
Извините из за болезни сильно туплю,сейчас исправлю
|