我们说我在Lua有这张桌子:
items = {
{7007, "quux", 9.7},
{1004, "foo", 12.3},
{1234, "bar", 9.6},
{1234, "baz", 8.8},
}
我这样排序:
function compare(a,b)
return a[1] < b[1]
end
table.sort(items, compare)
这将导致表按第一项排序,但因为其中2项的值为&#34; 1234,&#34;他们相对于彼此的立场是任意的。
我将如何进行第二种表格,以便&#34; 1234&#34;保持他们在表中的绝对位置,但使用第三个值(9.6和8.8)来执行更精细的排序?
答案 0 :(得分:2)
您只需在比较功能中添加更多逻辑。比较函数的返回值告诉Lua两个项目中的哪一个首先出现。如果它返回true,则会先出现,否则b将首先出现。
function compare(a,b)
if a[1] == b[1] then
return a[3] < b[3]
else
return a[1] < b[1]
end
end
或更短:
function compare(a,b)
return a[1] < b[1] or a[1] == b[1] and a[3] < b[3]
end
这很简单。你能否就你最近的一个问题跟我最后的建议?拿笔写一篇论文,写下如何用英语或任何你的母语解决这个问题。
如果[1]小于b [1],则项目a出现, 否则,如果[1]等于b [1],那么如果[3]小于b [3]则a先来。
如果你把它翻译成Lua,它看起来像:
function compare(a, b)
if a[1] < b[1] then
return true
elseif a[1] == b[1] then
if a[3] < b[3] then
return true
end
end
end
这也有效,但你可以像上面所示那样把它写得更紧凑。