using the example at http://acm.msu.ru/mkoshp/fpc/rtl/objects/tsortedcollection.html
may something this way ... Type TMethod = ( method_type_1, method_type_2, method_type_3); PMySortedCollection = ^TMySortedCollection; TMySortedCollection = Object(TSortedCollection) method : TMethod; Function Compare (Key1,Key2 : Pointer): Sw_integer; virtual; procedure setMethod( const m : TMethod); end; Implementation Uses MyObject; Function TMySortedCollection.Compare (Key1,Key2 : Pointer) :sw_integer; begin case method of method_type_1: Compare:=PMyobject(Key1)^.GetField - PMyObject(Key2)^.GetField; method_type_2: Compare:=PMyobject(Key2)^.GetField - PMyObject(Key1)^.GetField; method_type_3: Compare:=PMyobject(Key1)^.GetField - 2 * PMyObject(Key2)^.GetField; end; end; procedure TMySortedCollection.setMethod( const m : TMethod); begin method := m; .... end; Em 12.03.2014 15:51, Jim Leonard escreveu: > I'm working on a project that utilizes a TSortedCollection to help keep > items sorted during processing. There is a need to re-sort the > collection by different criteria on-demand as the program runs. > (Different sort orders are an integral part of the processing.) > > Unless I'm missing something, TSortedCollection lacks the ability to > change the Compare method after initialization and/or explicitly re-sort > the collection on-demand. I was planning on handling each new (re)sort by: > > 1. Initializing a new TSortedCollection with the desired Compare method > 2. Copying the contents from the old collection to the new one > 3. Swap collection pointers; destroy the old collection. > > This works without much penalty because the collection will never get > beyond a reasonable size, but the implementation makes me cringe. Is > there a more elegant way to do this (without writing my own sort > routines for a plain TCollection)?
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal