really cool OO type sorting possible?

BlitzMax Forums/BlitzMax Beginners Area/really cool OO type sorting possible?

flying willy(Posted 2004) [#1]
Hi,

Now we have OO is it possible to....


SortList(a:type,bythisvar) ? respecting positive and negative?

Or maybe do sorting faster somehow?


Brucey(Posted 2004) [#2]
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


AaronK(Posted 2004) [#3]
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


flying willy(Posted 2004) [#4]
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


flying willy(Posted 2004) [#5]
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.


Jim Teeuwen(Posted 2004) [#6]
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



Tibit(Posted 2004) [#7]
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


marksibly(Posted 2004) [#8]
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