Lua粗略排序,然后精细排序

时间:2018-04-06 08:32:57

标签: sorting lua lua-table

我们说我在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)来执行更精细的排序?

1 个答案:

答案 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

这也有效,但你可以像上面所示那样把它写得更紧凑。