Notifications
Clear all
[Closed] sort array based on pos.X
Feb 21, 2012 11:05 pm
I’m trying to figure out a way to sort and array of objects based on their x position in world space. This seems like it should work but it is giving undesired results.
collection = selection as array
fn fnComparePositionX obj1 obj2 = (
obj1Pos = (in coordsys world obj1.pos).x
obj2Pos = (in coordsys world obj2.pos).x
if(obj1Pos < 0) then obj1Pos *= -1
if(obj2Pos < 0) then obj2Pos *= -1
local d = obj1Pos - obj2Pos
case of
(
(d < 0): -1
(d > 0): 1
default: 0
)
)
qsort collection fnComparePositionX
clearlistener()
print collection
5 Replies
Feb 21, 2012 11:05 pm
It seems to me like this comparison function should be sufficient:
fn fnComparePositionX obj1 obj2 =
(in coordsys world obj1.pos).x - (in coordsys world obj2.pos).x
Feb 21, 2012 11:05 pm
I was overthinking it
data = selection as array
fn sortByX obj1 obj2 = if obj1.pos.x < obj2.pos.x then -1 else if obj1.pos.x > obj2.pos.x then 1 else 0
qsort data sortByX
print final
Feb 21, 2012 11:05 pm
I’m not sure what was happening but I was getting odd results with yours as well.
Here is what I got working.
data = selection as array
fn sortByX obj1 obj2 dir: = if (in coordsys world obj1.pos)[dir] < (in coordsys world obj2.pos)[dir] then -1 else if (in coordsys world obj1.pos)[dir] > (in coordsys world obj2.pos)[dir] then 1 else 0
qsort data sortByX dir:1
clearlistener()
print data