乐闻世界logo
搜索文章和话题

What is the difference between pairs() and ipairs() in Lua?

4 个月前提问
4 个月前修改
浏览次数37

1个答案

1

在Lua中,pairs()ipairs()都用于遍历表(table),但它们的用途和行为有所不同。我将通过两个方面来解释它们的区别:遍历的内容和遍历的顺序。

1. 遍历的内容

  • pairs() 函数用于遍历表中的所有元素,包括数组部分和哈希表部分。它可以遍历到所有的键值对,不论键是数字还是字符串。

  • ipairs() 函数仅用于遍历表中的数组部分,即索引为连续的整数的元素。它从索引1开始遍历,直到遇到第一个nil值为止。这意味着它不能遍历非整数键或中间有nil值的数组部分。

2. 遍历的顺序

  • pairs() 通常不保证遍历的顺序,因为它依赖于表内部的哈希实现。

  • ipairs() 总是按照索引的升序来遍历元素,从1开始,直到最后一个非nil的连续整数索引。

示例

假设我们有以下Lua表:

lua
local tbl = { [1] = "apple", [3] = "banana", "orange", ["four"] = "strawberry" }

如果我们使用ipairs()遍历这个表,结果如下:

lua
for i, v in ipairs(tbl) do print(i, v) -- 输出:1 apple end

注意,它只输出了索引为1的元素。索引2是nil,所以ipairs()在这之后停止了遍历。

而使用pairs()遍历时,结果如下:

lua
for key, value in pairs(tbl) do print(key, value) -- 可能的输出(顺序不定): -- 1 apple -- 3 banana -- 1 orange -- four strawberry end

这里pairs()输出了所有的键值对,不管键是整数还是字符串。

结论

  • 使用ipairs()时,如果你确定要处理的是纯粹的数组或者确保数组索引是连续的,那么这是一个不错的选择。
  • 使用pairs()时,适用于需要遍历整个表,包括非连续索引的数组和哈希表部分。

希望这可以清楚地解释了pairs()ipairs()之间的区别,并帮助你在实际使用中做出更合适的选择。

2024年7月25日 13:50 回复

你的答案