lua table.sort 未按预期运行

lua table.sort not behaving as expected

我有一个评估图像集并为它们分配给定值的程序,现在我想对这个程序的输出进行排序,为此我有以下代码:

 function SelectTop(params,images,count)
    local values={}  
    for k,v in pairs(images) do
        local noError,res=pcall(evaluate,params,v)

    if noError then 
        values[v]=res
    else

    values[v] = 9999999999999999999999999999999999999999999999999999999999
    end
  end
function compare(a,b)
  return a[2] < b[2]
end

  table.sort(values,compare)
  print(values)
end

我们可以合理地假设 evaluate 的输出类似于 math.random(7000)(实际代码要复杂得多并且涉及神经网络)。 现在我希望输出被排序但是我得到的是这样的:

 {
  table: 0x40299d30 : 4512.3590053809
  table: 0x40299580 : 4029.3450116073
  table: 0x40298dd0 : 6003.9508240314
  table: 0x40297de0 : 6959.9145312802
  table: 0x40297630 : 4265.2784117677
  table: 0x40296e40 : 3850.0829011681
  table: 0x40296690 : 4007.2308907069
  table: 0x40296ec0 : 3840.5216952082
  table: 0x4029a770 : 5059.1475464564
  table: 0x40299fc0 : 6058.9603651599
  table: 0x40299810 : 1e+58
  table: 0x40299060 : 1e+58
  table: 0x402988b0 : 5887.729117754
  table: 0x402978c0 : 3675.7295252455
  table: 0x40296920 : 1e+58
  table: 0x4029aa00 : 5624.6042279879
  table: 0x40295bf8 : 1391.8185365923
  table: 0x40296458 : 4276.09869066
  table: 0x40299aa0 : 1e+58
  table: 0x402992f0 : 6334.3641972965
  table: 0x40298300 : 2660.5004512843
  table: 0x40298b40 : 6200.373787482
  table: 0x40296148 : 6178.926312832
  table: 0x40298380 : 1559.5307868896
  table: 0x40295968 : 1e+58
  table: 0x40296bb0 : 6708.7545218628
  table: 0x4029b550 : 1484.2931717456
  table: 0x40298400 : 1638.1286256175
  table: 0x40298070 : 3762.7368939272
  table: 0x402963d8 : 1500.002116023
  table: 0x4029ac90 : 2486.2695974502
  table: 0x40295e88 : 1e+58
  table: 0x40297b50 : 4806.6468870717
  table: 0x4029a4e0 : 4328.0636461426
  table: 0x402973a0 : 4757.4343171052
  table: 0x4029a250 : 3998.8649821268
}

那么为什么 table.sort 在这里不起作用?我假设这里会发生某种排序?

有人知道我做错了什么吗?

所以如果我们想要一个完整的例子,我们可以这样做:

function evaluate (a,b)
    return math.random(7000)
end
SelectTop(nil,{ {a, b, c}, {d, e, f}, {g, e, f}, {f, e, f} },0)

输出:

{ table: 0x41c2af18 : 5560
  table: 0x41c2afa8 : 4131
  table: 0x41c2af60 : 4892
  table: 0x41c2aff0 : 5273
}

table.sort 适用于数组,不适用于字典。

您需要将 values[v]=res 替换为 values[#values+1]= {v, res} 并相应地调整 compare

现在 table.sort 将看到空数组 - 没有项目 idx 1/2/3/...,因为您正在使用图像本身对结果进行索引。