如何按值对 table 进行排序,然后按顺序打印索引
How to sort table by value and then print index in order
我想使用以下格式创建 table t
。
t[uniqueID] = order
uniqueID
将是唯一的,但 order
每次都可以相同或不同。
然后我想按升序对 table 进行排序,以便我可以相应地打印 uniqueID
。
我的代码:
t = {}
function compare(a, b)
return a[2] < b[2]
end
function printid()
for k, v in pairs(t) do
print(k)
end
end
function main()
t[5] = 47
t[6] = 45
t[7] = 49
table.sort(t, compare)
printid()
end
我得到的结果:
5
6
7
我期望的结果:
6
5
7
怎样才能得到我想要的结果?
来自“在 Lua 中编程”部分 19.3 “Sort”。
A common mistake is to try to order the indices of a table. In a table, the indices form a set, and have no order whatsoever.
这意味着您必须将 table t
对放入另一个 table sorted
中,然后具有连续的索引。然后可以根据您定义的谓词对 table 进行排序。此外,在迭代连续索引的 table 时必须使用 ipairs
,因为在 pairs
中未指定顺序。
local t = {}
t[5] = 47
t[6] = 45
t[7] = 49
local sorted = {}
for k, v in pairs(t) do
table.insert(sorted,{k,v})
end
table.sort(sorted, function(a,b) return a[2] < b[2] end)
for _, v in ipairs(sorted) do
print(v[1],v[2])
end
pairs
doesn't iterate in any particular order(不管是否排序)
table.sort
仅适用于 lists -- 使用键 [1]
、[2]
、[3]
的表。 .., [#list]
.
您需要一个按排序顺序排列的 ID 列表。这意味着
- 列出 ID
- 按关联值对它们进行排序
在代码中,
local ids = {}
-- Order of insertion doesn't matter here since we will sort
for id in pairs(t) do
table.insert(ids, id)
end
-- Sort the list of IDs by the values associated with each
table.sort(ids, function(a, b)
return t[a] < t[b]
end)
for i = 1, #ids do
print(ids[i])
end
--> 6
--> 5
--> 7
我想使用以下格式创建 table t
。
t[uniqueID] = order
uniqueID
将是唯一的,但 order
每次都可以相同或不同。
然后我想按升序对 table 进行排序,以便我可以相应地打印 uniqueID
。
我的代码:
t = {}
function compare(a, b)
return a[2] < b[2]
end
function printid()
for k, v in pairs(t) do
print(k)
end
end
function main()
t[5] = 47
t[6] = 45
t[7] = 49
table.sort(t, compare)
printid()
end
我得到的结果:
5
6
7
我期望的结果:
6
5
7
怎样才能得到我想要的结果?
来自“在 Lua 中编程”部分 19.3 “Sort”。
A common mistake is to try to order the indices of a table. In a table, the indices form a set, and have no order whatsoever.
这意味着您必须将 table t
对放入另一个 table sorted
中,然后具有连续的索引。然后可以根据您定义的谓词对 table 进行排序。此外,在迭代连续索引的 table 时必须使用 ipairs
,因为在 pairs
中未指定顺序。
local t = {}
t[5] = 47
t[6] = 45
t[7] = 49
local sorted = {}
for k, v in pairs(t) do
table.insert(sorted,{k,v})
end
table.sort(sorted, function(a,b) return a[2] < b[2] end)
for _, v in ipairs(sorted) do
print(v[1],v[2])
end
pairs
doesn't iterate in any particular order(不管是否排序)
table.sort
仅适用于 lists -- 使用键 [1]
、[2]
、[3]
的表。 .., [#list]
.
您需要一个按排序顺序排列的 ID 列表。这意味着
- 列出 ID
- 按关联值对它们进行排序
在代码中,
local ids = {}
-- Order of insertion doesn't matter here since we will sort
for id in pairs(t) do
table.insert(ids, id)
end
-- Sort the list of IDs by the values associated with each
table.sort(ids, function(a, b)
return t[a] < t[b]
end)
for i = 1, #ids do
print(ids[i])
end
--> 6
--> 5
--> 7