如何按顺序打印 LUA table?
How can I print a LUA table in order?
我有一个 table 需要按顺序打印出来。我知道 LUA tables 没有被排序..但是我很难按顺序打印出来。我已经从这个网站上剪下了十几个代码片段,但我就是无法让它工作。
假设我有一个 table 这样的:
local tableofStuff = {}
tableofStuff['White'] = 15
tableofStuff['Red'] = 55
tableofStuff['Orange'] = 5
tableofStuff['Pink'] = 12
我怎样才能让它打印成这样...
Red, 55
White, 15
Pink, 12
Orange, 4
在循环中使用这样一行...
print(k..', '..v)
您可以将 key/value 对存储在一个数组中,按第二个元素对数组进行排序,然后遍历该数组。 (这个例子使用了尾递归,因为我就是这么想的。)
local tableofStuff = {}
tableofStuff['White'] = 15
tableofStuff['Red'] = 55
tableofStuff['Orange'] = 5
tableofStuff['Pink'] = 12
-- We need this function for sorting.
local function greater(a, b)
return a[2] > b[2]
end
-- Populate the array with key,value pairs from hashTable.
local function makePairs(hashTable, array, _k)
local k, v = next(hashTable, _k)
if k then
table.insert(array, {k, v})
return makePairs(hashTable, array, k)
end
end
-- Print the pairs from the array.
local function printPairs(array, _i)
local i = _i or 1
local pair = array[i]
if pair then
local k, v = table.unpack(pair)
print(k..', '..v)
return printPairs(array, i + 1)
end
end
local array = {}
makePairs(tableofStuff, array)
table.sort(array, greater)
printPairs(array)
我有一个 table 需要按顺序打印出来。我知道 LUA tables 没有被排序..但是我很难按顺序打印出来。我已经从这个网站上剪下了十几个代码片段,但我就是无法让它工作。
假设我有一个 table 这样的:
local tableofStuff = {}
tableofStuff['White'] = 15
tableofStuff['Red'] = 55
tableofStuff['Orange'] = 5
tableofStuff['Pink'] = 12
我怎样才能让它打印成这样...
Red, 55
White, 15
Pink, 12
Orange, 4
在循环中使用这样一行...
print(k..', '..v)
您可以将 key/value 对存储在一个数组中,按第二个元素对数组进行排序,然后遍历该数组。 (这个例子使用了尾递归,因为我就是这么想的。)
local tableofStuff = {}
tableofStuff['White'] = 15
tableofStuff['Red'] = 55
tableofStuff['Orange'] = 5
tableofStuff['Pink'] = 12
-- We need this function for sorting.
local function greater(a, b)
return a[2] > b[2]
end
-- Populate the array with key,value pairs from hashTable.
local function makePairs(hashTable, array, _k)
local k, v = next(hashTable, _k)
if k then
table.insert(array, {k, v})
return makePairs(hashTable, array, k)
end
end
-- Print the pairs from the array.
local function printPairs(array, _i)
local i = _i or 1
local pair = array[i]
if pair then
local k, v = table.unpack(pair)
print(k..', '..v)
return printPairs(array, i + 1)
end
end
local array = {}
makePairs(tableofStuff, array)
table.sort(array, greater)
printPairs(array)