really cool OO type sorting possible?
BlitzMax Forums/BlitzMax Beginners Area/really cool OO type sorting possible?| 
 | ||
| Hi, Now we have OO is it possible to.... SortList(a:type,bythisvar) ? respecting positive and negative? Or maybe do sorting faster somehow? | 
| 
 | ||
| You can override the Compare method for a Type, which gives you *some* control over ordering of user defined types... Not sure if this is as much control as you are talking about? :o) Brucey | 
| 
 | ||
| Well you could also write your own sort list that uses a passed in functor object, that can do the comparisons for you in whatever way you want, depending on how you want to sort. Aaron | 
| 
 | ||
| I'm really very much a beginner. Thanks for your help but I'm actually wondering if someone has done a fast sort already..? Thanks | 
| 
 | ||
| sorry to be a pain in the bum.  But, I can't find before and after type commands. I wanted to port the quicksort by skidracer but can't. | 
| 
 | ||
| 
Type A
  Field SortField:String
  Method New()
     '// stuff it with some 'random' shite
     For Local n:Int = 0 To 10
        SortField :+ Chr( Rnd( Asc("a"), Asc("z")) )
     Next
  End Method
  Method Compare:Int( o:Object )
     If( SortField > A(o).SortField ) Then
         Return 1
     Else If( SortField < A(o).SortField ) Then
         Return -1
	 Else
         Return 0
     End If
  End Method
End Type
SeedRnd( MilliSecs() )
Local arr:A[ 10 ]
For Local n:Int = 0 To 9
     arr[n] = New A
Next
'// Sort the array. Non-string or non-numeric
'// values in the array are sorted by object(memory) handle,
'// so not very useful.
'// The type must override the native Blitz Object's 
'// Compare() method to offer a different comparison
arr.sort( 1 ) '// 1=ascend, 0=desc
For n = 0 To arr.length - 1
     Print( arr[n].SortField )
Next
 | 
| 
 | ||
| The before and after command are in BlitzMax they are just hidden from you =) They are in the TList Type, which you use when you create Lists. I assume you have a type of which you created an instance called BattleCruiser, here is some commands: BattleCruiserList:TList = CreateList() * Add stuff to the list BattleCruiserList.AddFirst( BattleCruiser ) BattleCruiserList.AddLast( BattleCruiser2 ) newLink:TLink=FindLink(BattleCruiser) newLink.InsertAfterLink(BattleCruiser2) When you deal with Lists you deal with a ListType which contains LinkTypes, each TLink which in turn contains YourType. If The Links are sorted so are YourObjects. Find the right Linkm insert it before/After. If I have time I guess I'll try to make a sort-TypeList function because it is quite complicated escpecially if you are not into OOP yet, but If you already know how to do a sort-Type-list in Blitz3D then this shouldn't be impossible. If you wounder wherefrom I get all commands check out your BlitzMax folder\Mod\brl.mod\LinkedList.Mod\LinkedList.bmx | 
| 
 | ||
| Defiance, Nice example, but a bit redundant as strings already provide a functional 'Compare' method: Local t$[]=["Hello","There","This","Is","A","Test","Of","String","Sorting"] t.Sort For local q$=EachIn t Print q Next |