在C代码中,我有一个数组和一个从零开始的索引用于在其中查找,例如:
char * names[] = {"Apple", "Banana", "Carrot"};
char * name = names[index];
我从一个嵌入的Lua脚本中,通过getIndex()
函数访问了index
,想要复制数组查找。鉴于Lua是以1为起始索引的数组,是否有一种被认为是“最佳”的方法来实现这一点?
例如,我可以创建一个与我的C数组具有相同内容的Lua数组,但这需要在索引时添加1:
names = {"Apple", "Banana", "Carrot"}
name = names[getIndex() + 1]
或者,我可以通过使用更复杂的表格来避免添加1的需要,但这会破坏像#names
这样的东西:
names = {[0] = "Apple", "Banana", "Carrot"}
name = names[getIndex()]
推荐哪种方法?
编辑: 感谢迄今为止给出的答案。不幸的是,在getIndex
函数内部将索引加1的解决方案并不总是适用的。这是因为在某些情况下,索引是“众所周知”的 - 也就是说,可能有记录表明索引0表示“苹果”等等。在这种情况下,应该更喜欢上述两种解决方案中的哪一种,还是有更好的选择吗?
编辑2: 再次感谢您的答案和评论,它们真正帮助我思考这个问题。我意识到可能存在两种不同的情况,而理想的解决方案可能针对每种情况都不同。
第一种情况是考虑一个数组,它可能随时间而变化,并且索引仅相对于当前数组。索引在代码外部没有任何意义。Doug Currie和RBerteig绝对正确:该数组应该是基于1的,getIndex
应该包含+1
。如前所述,这使得C和Lua端的代码都可以成为习惯用语。
第二种情况涉及具有意义的索引,可能还涉及始终相同的数组。一个极端的例子是names
包含"Zero", "One", "Two"
。在这种情况下,每个索引的预期值是众所周知的,我认为使Lua端的索引基于1是不直观的。我认为应该更喜欢其他方法之一。
getIndex
函数或字符串。请注意,在Lua中,字符串很便宜,因为它们是内部化的,并且字符串比较是指针比较。 - Doug Currie