lua中的结构数组?
lua是否支持某种c风格的结构 我想从c转换如下字体位图:lua中的结构数组?,lua,lua-table,Lua,Lua Table,lua是否支持某种c风格的结构 我想从c转换如下字体位图: struct charmatrix { char c; int line[5]; }; static charmatrix font[] = { "1", {0x2, 0x6, 0x2, 0x2, 0x2}, "2", {0xe, 0x1, 0x6, 0x8, 0xf}, "a" , {0x0, 0x5, 0xb, 0xb, 0x5} } font[letter].line[x] [编辑]添加了更多数据以显示非数字
struct charmatrix { char c; int line[5]; };
static charmatrix font[] =
{
"1", {0x2, 0x6, 0x2, 0x2, 0x2},
"2", {0xe, 0x1, 0x6, 0x8, 0xf},
"a" , {0x0, 0x5, 0xb, 0xb, 0x5}
}
font[letter].line[x]
[编辑]添加了更多数据以显示非数字索引Lua中不存在结构的原始概念,但表也有类似的用途 使用表格:
local font = {
["1"] = {0x2, 0x6, 0x2, 0x2, 0x2},
["2"] = {0xe, 0x1, 0x6, 0x8, 0xf}
}
然后可以访问font[letter][x]
或font.letter[x]
。请记住,Lua数组不是零索引的,因此x从1开始
如果需要更多的结构,则可以使用函数来构造表:
local function charmatrix(c, l1, l2, l3, l4, l5)
return {[c] = { l1, l2, l3, l4, l5 }}
end
local font = {
charmatrix("1", 0x2, 0x6, 0x2, 0x2, 0x2),
charmatrix("2", 0xe, 0x1, 0x6, 0x8, 0xf),
}
但这可能有点过头了
编辑:如果要在代码中保留行
,可以这样构造一个表:
local font = {
["1"] = { line = {0x2, 0x6, 0x2, 0x2, 0x2} },
["2"] = { line = {0xe, 0x1, 0x6, 0x8, 0xf} }
}
已访问font[letter].line[x]
或font.letter.line[x]
请注意,除了数字字符串之外,作为字符串的键在定义时不需要引号,这就是为什么
行
在“1”
和“2”
被定义时不被引号包围的原因。(因此您可以使用代码访问:font[letter][“line”][x]
)Lua中没有结构的原始概念,但表也有类似的用途
使用表格:
local font = {
["1"] = {0x2, 0x6, 0x2, 0x2, 0x2},
["2"] = {0xe, 0x1, 0x6, 0x8, 0xf}
}
然后可以访问font[letter][x]
或font.letter[x]
。请记住,Lua数组不是零索引的,因此x从1开始
如果需要更多的结构,则可以使用函数来构造表:
local function charmatrix(c, l1, l2, l3, l4, l5)
return {[c] = { l1, l2, l3, l4, l5 }}
end
local font = {
charmatrix("1", 0x2, 0x6, 0x2, 0x2, 0x2),
charmatrix("2", 0xe, 0x1, 0x6, 0x8, 0xf),
}
但这可能有点过头了
编辑:如果要在代码中保留行
,可以这样构造一个表:
local font = {
["1"] = { line = {0x2, 0x6, 0x2, 0x2, 0x2} },
["2"] = { line = {0xe, 0x1, 0x6, 0x8, 0xf} }
}
已访问font[letter].line[x]
或font.letter.line[x]
请注意,除了数字字符串之外,作为字符串的键在定义时不需要引号,这就是为什么
行
在“1”
和“2”
被定义时不被引号包围的原因。(因此您可以使用代码进行访问:font[letter][“line”][x]
)“1”=
不是有效的lua语法。你需要在它周围加上[]
。我不知道你为什么要引用“1”
和“2”
<代码>[1]=…,[2]=…会更清晰。事实上,你不必指定索引,只要写localfont={{0x2,0x6,0x2,0x2},{0xe,0x1,0x6,0x8,0xf}
注意font.letter
在这里不起作用,因为letter
是“1”
或“2”
@Keith我确实需要显式索引,因为它们不全是数字的。。。0,1,2,…a,b,c,…a,b,C@MikeRedrobe:和[“1”]=…
在语义上与[1]=…
不同。例如,{[1]=“foo”,[“1”]=“bar”}
为您提供了一个包含两个不同键/值对的表。(这里可能会有一些混淆。)“1”=
不是有效的lua语法。你需要在它周围加上[]
。我不知道你为什么要引用“1”
和“2”
<代码>[1]=…,[2]=…会更清晰。事实上,你不必指定索引,只要写localfont={{0x2,0x6,0x2,0x2},{0xe,0x1,0x6,0x8,0xf}
注意font.letter
在这里不起作用,因为letter
是“1”
或“2”
@Keith我确实需要显式索引,因为它们不全是数字的。。。0,1,2,…a,b,c,…a,b,C@MikeRedrobe:和[“1”]=…
在语义上与[1]=…
不同。例如,{[1]=“foo”,[“1”]=“bar”}
为您提供了一个包含两个不同键/值对的表。(这里可能会出现一些混乱。)