sorting - 如何在记录原始位置的同时对表格进行排序?

标签 sorting lua lua-table

我有一个 Lua 整数表,我按升序排序。稍后,我的脚本需要获取最小数字的索引(即排序前它最初所在的位置),尝试一些东西,然后移动到第二小数字的索引,尝试一些东西,等等,直到排序列表的末尾。

我的问题是,当我对它进行排序时,我显然丢失了原始表的原始位置(或索引)。有没有办法,也许使用包含数字和索引的嵌套表来记录原始索引,然后对整数执行排序?

为了让问题更清楚一点:

Original table: 4 6 2

Sorted table: 2 4 6

In this sorted table, I need to know that 2 was at the position 3 before sorting, that 4 was at position 1, and that 6 was at position 2.

最佳答案

像下面这样的东西(写在答案框中的未经测试的代码)无论唯一性如何都应该工作(尽管 lua 表排序不稳定所以你不能保证在重要的情况下首先排序哪个相同的元素):

local origtab = {4, 6, 2}
local sorttab = {}
for i,v in ipairs(origtab) do
    sorttab[i] = {index = i, value = v}
end
table.sort(sorttab, function(a, b) return a.value < b.value end)
for i,t in ipairs(sorttab) do
    -- t.index is original index
    -- t.value is value
end

关于sorting - 如何在记录原始位置的同时对表格进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20842817/

相关文章:

c# - 在 StringBuilder 中对行进行排序

list - 方案拆分操作不起作用

luaL_loadfile()可以用luaL_loadbuffer()代替吗?

android - Corona SDK - 如何实现对象取消触摸

lua - Lua新手——表操作

java - 在对键排序后对列表进行排序

C++ 排序数组 => vector 迭代器不兼容

class - 从 Lua 的类中获取表

function - Lua 函数——一个简单的误会

sorting - Lua表排序2比较