|
|
Регистрация | << Правила форума >> | 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; // тут он и используется ... jmp $ ; Happy End! The Cake Is A Lie. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#10
|
|||
|
|||
Извините из за болезни сильно туплю,сейчас исправлю
|