在C代码中,我有一个数组和一个基于零的索引,用于在其中查找,例如:
char * names[] = {"Apple","Banana","Carrot"}; char * name = names[index];
从嵌入式Lua脚本中,我可以通过getIndex()函数访问索引,并希望复制数组查找。给定Lua的一个阵列,是否有一个“最好的”最佳方法?
例如,我可以创建一个与我的C数组相同内容的Lua数组,但这需要在索引时添加1:
names = {"Apple","Carrot"} name = names[getIndex() + 1]
或者,我可以通过使用更复杂的表来避免添加1,但是这会打破像#names这样的东西:
names = {[0] = "Apple","Carrot"} name = names[getIndex()]
建议采用什么方法?
编辑:谢谢你到目前为止的答案。不幸的是,getIndex函数中的索引添加1的解决方案并不总是适用的。这是因为在某些情况下,指数是“众所周知的” – 也就是说,可以记录指数为0表示“苹果”等等。在这种情况下,上述解决方案中的一种或多种是否优先,还是有较好的选择?
编辑2:再次感谢您的答案和评论,他们真的帮助我思考这个问题。我已经意识到可能会出现两种不同的问题出现的情况,理想的解决方案可能会有所不同。
在第一种情况下,例如考虑可能不同时间的数组和简单地相对于当前数组的索引。索引在代码之外没有意义。 Doug Currie和RBerteig是绝对正确的:数组应该是1,而getIndex应该包含一个1.如上所述,这允许C和Lua两方面的代码是惯用的。
第二种情况涉及具有意义的索引,并且可能是总是相同的数组。名称中包含“零”,“一”,“二”的极端例子。在这种情况下,每个指数的预期值是众所周知的,我觉得将Lua方面的指数作为一个指标是不直观的。我认为其他方法之一应该是首选。
解决方法
使用基于1的Lua表,并将1嵌入到getIndex函数中。