2012-07-26 63 views
2

我正在尋找一個很好的方式來做一個地圖/選擇一個Lua表。有沒有與Scala的地圖或C#的Select功能相媲美的lua?

例如。我有一個表格:

myTable = { 
    pig = farmyard.pig, 
    cow = farmyard.bigCow, 
    sheep = farmyard.whiteSheep, 
} 

我該如何寫myTable.map(function(f)f.getName)? [假設所有農場動物都有名字]

即。將該函數應用於表中的所有元素。

回答

5

發表您自己的版本?在lua中沒有內置的函數來做到這一點。

function map(tbl, f) 
    local t = {} 
    for k,v in pairs(tbl) do 
     t[k] = f(v) 
    end 
    return t 
end 

t = { pig = "pig", cow = "big cow", sheep = "white sheep" } 
local newt = map(t, function(item) return string.upper(item) end) 

table.foreach(t, print) 
table.foreach(newt, print) 

生產:

pig pig 
sheep white sheep 
cow big cow 
pig PIG 
cow BIG COW 
sheep WHITE SHEEP 
+0

由於'string.upper'是一個參數的函數,則可以進一步簡化它向本地'蠑螈=地圖(T,string.upper)') – 2012-07-26 16:19:01

+0

@MichalKottman我知道,我這樣做是爲了展示如何直接傳遞一個匿名函數的例子。 – 2012-07-26 16:25:40

0

如果你使用Lua 5.1,你可以使用table.foreach()

a = { 1, 2, 3 } 
table.foreach(a, function(k,v) a[k] = v + 2 end) 
table.foreach(a, print) 
-- 1 3 
-- 2 4 
-- 3 5 

這已被棄用,不過,不再存在於5.2。

相關問題