我正在开发一个简单的朋友系统,并希望对其中的friendData进行排序 规则。
我比较了两个朋友的状态,级别和离线时间。
PS:一个朋友的状态为3(在线= 3,忙= 2,离线= 1)。
这是我的代码。
local function compare(friend1,friend2)
local iScore1 = 0
local iScore2 = 0
if friend1["eStatus"] > friend2["eStatus"] then
iScore1 = iScore1 + 1
end
if friend1["iLevel"] > friend2["iLevel"] then
iScore1 = iScore1 + 1
end
if friend1["iOfflineTime"] < friend2["iOfflineTime"] then
iScore1 = iScore1 + 1
end
return iScore1 > iScore2
end
table.sort(FriendData,compare)
当我添加几个朋友时它起作用。但是当我得到更多朋友时,它抛出异常“排序无效的排序功能”。 有人可以告诉我如何解决吗? :)
答案 0 :(得分:1)
感谢@Paul Hebert和@Egor Skriptunoff,我知道了。
关键是compare(a,b)和compare(b,a)应该有不同的返回结果。
这意味着:
当iScore1 == iScore2时,应该有一个唯一的值进行比较(例如,帐户ID)。
不同的比较值应具有不同的分数。
这是新代码。
local function compare(friend1,friend2)
local iScore1 = 0
local iScore2 = 0
if friend1["eStatus"] > friend2["eStatus"] then
iScore1 = iScore1 + 100
elseif friend1["eStatus"] < friend2["eStatus"] then
iScore2 = iScore2 + 100
end
if friend1["iLevel"] > friend2["iLevel"] then
iScore1 = iScore1 + 10
elseif friend1["iLevel"] < friend2["iLevel"] then
iScore2 = iScore2 + 10
end
if friend1["iOfflineTime"] < friend2["iOfflineTime"] then
iScore1 = iScore1 + 1
elseif friend1["iOfflineTime"] > friend2["iOfflineTime"] then
iScore2 = iScore2 + 1
end
if iScore1 == iScore2 then --They are both 0.
return friend1["accountID"] > friend2["accountID"]
end
return iScore1 > iScore2
end
table.sort(FriendData,compare)