如何有效地将数值运算应用于lua中的数组



比方说,我有一个数组

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)

最新更新