比方说,我有一个数组
a = { 1, 2, 10, 15 }
我想将每个元素除以3,并将结果存储在一个新数组中。有没有比这更有效/更优雅的方法:
b = { }
for i,x in pairs(a) do
b[i] = x / 3
end
在R中,我会简单地执行b <- a/3
。lua中有类似的东西吗,或者可能有一种将函数应用于表中每个元素的方法吗?
Lua是轻量级的,因此没有现成的函数,但您可以使用metatable创建类似的函数。
local mt_vectorization = {
__div = function (dividend, divisor)
local b = {}
for i,x in pairs(dividend) do
b[i] = x / divisor
end
return b
end
}
a = setmetatable({ 1, 2, 10, 15 }, mt_vectorization)
b = a / 3
除了shingo的答案外,我同时发现在lua:中编写R风格的映射函数非常容易
function map(x, f)
local ret = { }
for k, v in pairs(x) do
ret[k] = f(v)
end
return ret
end
这使得一些操作变得简单,例如
a = { 1, 2, 3, 5, 10 }
map(a, function(x) return x * 2 end)