lua table.sort表现不如预期

时间:2017-05-02 09:34:01

标签: sorting lua lua-table

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

 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
}

1 个答案:

答案 0 :(得分:4)

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

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

现在table.sort会看到空数组 - 没有项目idx 1/2/3 / ...,因为你是用图像本身索引结果。