lua table.sort的bug

总结:不能用<=,不然会报错。当<与==拆分的时候,==(如果是最后一个if语句)必须要返回false。

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp(a,b)

>> if a[1] <= b[1] then

>> return true

>> else

>> return false

>> end

>> end

> table.sort(tbl, comp)

stdin:1: invalid order function for sorting

stack traceback:

[C]: in function 'sort'

stdin:1: in main chunk

[C]: in ?

> table.sort(tbl,comp)

stdin:1: invalid order function for sorting

stack traceback:

[C]: in function 'sort'

stdin:1: in main chunk

[C]: in ?

> function comp(a,b)

if a[1] < b[1] then

return true

else

return false

end

end

> table.sort(tbl,comp)

> for i, _t in pairs(tbl) do

>> print(i, _t[1], _t[2])

>> end

1 3 3

2 3 2

3 3 3

4 3 2

5 4 1

6 4 2

7 4 2

8 5 3

9 5 4

10 5 1

11 5 3

12 5 1

13 5 5

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp(a,b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

return false

end

end

> function comp(a,b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

return false

else return false end

end

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 4 1

2 4 2

3 3 3

4 5 3

5 5 1

6 3 2

7 5 4

8 5 5

9 5 1

10 5 3

11 3 3

12 4 2

13 3 2

> function comp(a,b)

if a[1] < b[1] then

return true

else

return false

end

end

> table.sort(tbl,comp)

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 3 2

2 3 3

3 3 3

4 3 2

5 4 2

6 4 1

7 4 2

8 5 3

9 5 1

10 5 3

11 5 5

12 5 1

13 5 4

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp1(a, b)

>> if a[1] < b[1] then

>> return true

>> elseif a[1] == b[1] then

>> if a[2] < b[2] then

>> return true

>> else

>> return false

>> end

>> else

>> return false

>> end

>> end

> function comp1(a, b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

if a[2] <= b[2] then

return true

else

return false

end

else

return false

end

end

> table.sort(tbl,comp)

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp1(a, b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

if a[2] <= b[2] then

return true

else

return false

end

else

return false

end

end

> table.sort(tbl,comp1)

stdin:1: invalid order function for sorting

stack traceback:

[C]: in function 'sort'

stdin:1: in main chunk

[C]: in ?

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp1(a, b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

if a[2] < b[2] then

return true elseif a[2] == a[3] then return false

else

return false

end

else

return false

end

end

> table.sort(tbl,comp1)

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 3 2

2 3 2

3 3 3

4 3 3

5 4 1

6 4 2

7 4 2

8 5 1

9 5 1

10 5 3

11 5 3

12 5 4

13 5 5

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2},{5,4},{5,5},{5,1},{5,3},{3,3},{4,2},{3,2}}

> function comp1(a, b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

if a[2] < b[2] then

return true elseif a[2] == a[3] then return true

else

return false

end

else

return false

end

end

> table.sort(tbl,comp1)

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 3 2

2 3 2

3 3 3

4 3 3

5 4 1

6 4 2

7 4 2

8 5 1

9 5 1

10 5 3

11 5 3

12 5 4

13 5 5

> function comp(a, b)

>> if a[1] < b[1] then

>> return true

>> elseif a[1] == b[1] then

>> if a[2] < b[2] then

>> return true

>> elseif a[2] == b[2] then

>> return true

>> else

>> return false

>> end

>> else

>> return false

>> end

>> end

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2}}

> table.sort(tbl,comp)

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 3 2

2 3 3

3 4 1

4 4 2

5 5 3

6 5 1

> function comp(a, b)

if a[1] < b[1] then

return true

elseif a[1] == b[1] then

if a[2] < b[2] then

return true

elseif a[2] == b[2] then

return false

else

return false

end

else

return false

end

end

> tbl = {{4,1},{4,2},{3,3},{5,3},{5,1},{3,2}}

> table.sort(tbl,comp)

> for i, _t in pairs(tbl) do

print(i, _t[1], _t[2])

end

1 3 2

2 3 3

3 4 1

4 4 2

5 5 1

6 5 3