Sorting any field
BlitzMax Forums/BlitzMax Beginners Area/Sorting any field| 
 | ||
| I realise you can use compare method to sort on a particular field. However, I can't work out how to sort on ANY field. For example, if I have a type with X and Y fields how can I use sortlist with compare override but specify which field out of X and Y I want sorted? | 
| 
 | ||
| Type Bob
  Field X,Y
  Field SortUsingY
  Method Compare(other:Object)
    If Bob(other)
      If SortUsingY
        Return Sgn(Y - Bob(other).Y)
      Else
        Return Sgn(X - Bob(other).X)
      EndIf
    EndIf
    Return -1
  EndMethod
EndTypeOr something like that. It's probably better to have a global variable controlling which parameter to use, instead of one for each type instance. | 
| 
 | ||
| I went with the global variable as a quick solution. What if the compare is against either an int or a string field? What would the method return? <EDIT> Ignore me. I'm being a muppet. | 
| 
 | ||
| Lets say I have a List of this Type.... 
Type Unit
     Field X:Float,Y:Float
     Field Number:Int
     Method New()
          Number=Rand(1000)
          ListAddLast UnitList,Self
     End Method
End Type
How Can I Use Sort to Sort this list Using the Number Field. I want to go from Low to High. Regards, Eric | 
| 
 | ||
| 
Type Unit
     Global unitlist:Tlist=CreateList()
     Field X:Float,Y:Float
     Field Number:Int
     Method New()
          Number=Rand(1000)
          ListAddLast UnitList,Self
     End Method
     Method compare(myobject:Object)
          s:Unit = Unit(myobject)
          If Not s Then Return 1
          Return number - s.number
     End Method
End Type
SeedRnd MilliSecs()
For x = 1 To 100
  my:Unit = New unit
Next
   
SortList unit.unitlist
   
   ' Check to see if it is sorted correctly
For s:unit = EachIn unit.unitlist
    Print s.number
Next
 |