如何在Lua中实现Table键值反转:值映射含原键的表?
Lua Table 按值分组反转
需求说明
将原table的结构反转:以原table的值作为新table的键,把所有对应相同值的原键收集为数组,作为新table对应键的值。
原table数据(根据输出反推)
local my_table = { a = 80, b = 80, c = 70, d = 40, e = 70, f = 80 }
转换实现代码
local new_table = {} -- 遍历原table构建新结构 for key, value in pairs(my_table) do -- 初始化对应值的数组(如果不存在) if not new_table[value] then new_table[value] = {} end -- 将原键添加到对应数组 table.insert(new_table[value], key) end -- 打印新table(匹配期望输出格式) for key, value in pairs(new_table) do local key_list = table.concat(value, ",") print(string.format("%d {%s} # table", key, key_list)) end
代码说明
- 初始化空的
new_table用于存储转换结果 - 遍历原
my_table的每一组键值对:- 若
new_table中没有以当前value为键的条目,则创建一个空数组 - 将当前的
key插入到该数组中
- 若
- 遍历
new_table时,用table.concat把数组元素拼接为字符串,输出成期望的格式
原脚本修正提示
原脚本存在两处语法问题:
- 变量名拼写错误:
my_talbe应改为my_table - for循环缺少
do关键字,正确的遍历代码应为:
for key, value in pairs(my_table) do print(key, value) end
内容的提问来源于stack exchange,提问作者kerberos94
相关产品推荐
相关产品推荐

