Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по array of ...


alles ©   (2006-03-17 11:37:00) 

Здраствуйте
Есть рекорд
type DetailsOfPayment = record
      NameFileOfPayment:string;
      TypeOfMessage:string;
      InternalType:string;
end;
Потом создаю array
var K: array of DetailsOfPayment
и заполняю этот array
Теперь вопрос как можно быстро сортировать этот array по полю, допустим TypeOfMessage?
Есть идея использовать TStringList.Sort но не знаю как связывать этот array с ним.
Спасибо


Virgo_Style   (2006-03-18 14:57:00) [1]

у вас разное понимание слова "проще"


Reindeer Moss Eater   (2006-03-18 14:35:00) [2]

В том, что отсортировать это все можно и ручками.

Я спрашивал в чем сложность, а не можно ли ручками и ножками.
Используя TList и TStringList нужно написать одну функцию, сравнивающую два элемента.
Сортируя ручками и ножками этой функции будет мало.

И что же проще в конечном итоге?


TUser   (2006-03-18 05:43:00) [3]

В том, что отсортировать это все можно и ручками. А студенты, использующие для этого класси метод, потом приносят программу не более сложную, чем простенькая сортировка, но тем не менее требующую наличия дот нета последней версии, которого, разумеется, нет и не предвидится. Тоже, наверное, какое-нибудь готовое "решение" использовалось, не на Паскале ж писать, как ламакам.


TStas   (2006-03-17 22:12:00) [4]

Переписав в TLIst указатели и сортировав TList


Reindeer Moss Eater   (2006-03-17 12:40:00) [5]

Где здесь сложность-то?


TUser   (2006-03-17 12:39:00) [6]

Я все-таки не понимаю - зачем делать сложно, когда можно сделать намного проще?


Erik1   (2006-03-17 12:10:00) [7]

От Array по любому придется отказыватся, но можно сохранить record если использовать TList.
Type
 PDetailsOfPayment = ^DetailsOfPayment;
 Playment: TList;
begin
 Playment := TList.Cteate;
 New(PDetailsOfPayment);
 PDetailsOfPayment.NameFileOfPayment := 'Имя';
 PDetailsOfPayment.TypeOfMessage := 'Фигня разная';
 PDetailsOfPayment.InternalType := 'совсем фигня';
 Playment.Add(PDetailsOfPayment);
 ....
 Playment.Sort(ListSortCompare);
ListSortCompare - твоя хитрая функция сравнивающея Item1 и Item2.

PDetailsOfPayment(Item1).InternalType > PDetailsOfPayment(Item2).InternalType

P.S.
Хотя зачем тебе понадобилось делать все стрингами одному богу известно. Перечисление занчительно приятнее. IntType = (intFirst, intSecond, intKruto);


alles   (2006-03-17 12:06:00) [8]

Reindeer Moss Eater ©   (17.03.06 12:04) [10]
Спасибо


Reindeer Moss Eater   (2006-03-17 12:05:00) [9]

Смысл использования TStringList:
Наличие у него метода CustomSort


Reindeer Moss Eater   (2006-03-17 12:04:00) [10]

type
 PDetailsOfPayment = ^DetailsOfPayment;
 DetailsOfPayment = record
  NameFileOfPayment,
  TypeOfMessage,
  InternalType      :string;
end;

var
NewItem : PDetailsOfPayment;
MyList : TStringList;
begin
....
repeat
 New(NewItem);
 NewItem^.NameFileOfPayment := 'bla-bla-bla';
 NewItem^.TypeOfMessage := 'bla-bla-bla';
 NewItem^.InternalType :=  'bla-bla-bla';
 MyList.AddObject('',NewItem);
until MyList.Count >= 100;
end;


alles   (2006-03-17 12:03:00) [11]

TUser ©   (17.03.06 12:00) [8]
Понятно.  Думал что есть возможность с TStringList.
Вопрос заккрыт.
Спасибо всем.


TUser   (2006-03-17 12:00:00) [12]

Методом Add. Только тебе надо хранить объекты по 3 строчки, так что использовать TStringList  имхо - не надо. Уж лучше TList. А еще лучше ручками - см. [4].


alles   (2006-03-17 11:59:00) [13]

2 Reindeer Moss Eater ©   (17.03.06 11:52) [6]
Скажите пожалуста как можно заполнить этот TStringList?


Reindeer Moss Eater   (2006-03-17 11:52:00) [14]

и что это даст?

Это - ничего не даст.

Откажись от array of свои записи и используй вместо него TStringList.
Сортируй его методом CustomSort


alles   (2006-03-17 11:50:00) [15]

так чтоли

     NameFileOfPaymentList:TstringList
     TypeOfMessageList:TstringList
     InternalTypeList:TstringList

И в цикле где заполняю array поставить и
NameFileOfPaymentList.Add('value1');
     TypeOfMessageList.Add('value2');
     InternalTypeList.Add('value3');
и что это даст?


TUser   (2006-03-17 11:45:00) [16]

смотри любой алгоритм сортировки.  зы. я бы использовал не record, а ^resord - будет быстрее. Или TList.


Reindeer Moss Eater   (2006-03-17 11:43:00) [17]

Зачем тебе вообще array of ?


alles   (2006-03-17 11:42:00) [18]

2 Reindeer Moss Eater ©   (17.03.06 11:41) [1]
как связывать этот array с TStringList?
CustomSort знаю как делается


Reindeer Moss Eater   (2006-03-17 11:41:00) [19]

Смотри TStringList.CustomSort


Наверх

Титульная страница Поиск, карта сайта Написать письмо