luaにおけるpairsとipairsの違い

12078 ワード

標準ライブラリには、反復ファイルの各行(io.lines)、反復table要素の(pairs)、反復配列要素の(ipairs)、反復文字列内の単語の
(string.gmatch)など.LUAマニュアルではpairs、ipairsについて以下のように説明しています.ipairs (t)
Returns three values: an iterator function, the table  t , and 0, so that the construction
for i,v in ipairs(t) do body end

will iterate over the pairs ( 1,t[1] ), ( 2,t[2] ), ···, up to the first integer key absent from the table.
  pairs (t)
Returns three values: the  next  function, the table  t , and nil, so that the construction
for k,v in pairs(t) do body end

will iterate over all key–value pairs of table  t .
See function  next  for the caveats of modifying the table during its traversal.
 
これでipairsとpairsの違いがわかります.
 
pairsは、テーブル内のすべてのkeyを遍歴することができ、反復器自体および遍歴テーブル自体に加えてnilを返すことができる.
 
しかしipairsはnilを返すことができず、数字0を返すしかなく、nilに遭遇すると終了する.テーブルに表示される最初の整数ではないkeyにのみ遍歴できます
 1  2  

 3  eg:

 4 local tabFiles = {

 5 [3] = "test2",

 6 [6] = "test3",

 7 [4] = "test1"

 8 }

 9  

10 for k, v in ipairs(tabFiles) do

11 print(k, v)

12 end

13  

14  

15 16  

17ipairs(tabFiles)    , key=1  value  nil,              。

18  

19 >lua -e "io.stdout:setvbuf 'no'" "Test.lua"

20 >Exit code: 0

21  

22 23 for k, v in pairs(tabFiles) do

24 print(k, v)

25 end

26 27 >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 

28 3 test2

29 6 test3

30 4 test1

31 >Exit code: 0

32 33 local tabFiles = {

34 [1] = "test1",

35 [6] = "test2",

36 [4] = "test3"

37 }

38 for k, v in ipairs(tabFiles) do

39 print(k, v)

40 end

41              key=1  value test1

42  >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 

43 1 test1

44 >Exit code: 0 

45 --[  1.]--

46 local tt =

47 {

48     [1] = "test3",

49     [4] = "test4",

50     [5] = "test5"

51 }

52 

53 for i,v in pairs(tt) do        --    "test4" "test3" "test5"

54     print( tt[i] )

55 end

56 

57 for i,v in ipairs(tt) do    --    "test3" k=2   

58     print( tt[i] )

59 end

60 

61 

62 

63 

64 

65 -- [[  2.]] --

66 tbl = {"alpha", "beta", [3] = "uno", ["two"] = "dos"}

67 

68 for i,v in ipairs(tbl) do    --     

69     print( tbl[i] )

70 end

71 

72 for i,v in pairs(tbl) do    --    

73     print( tbl[i] )

74 end

 
http://blog.csdn.net/witch_soya/article/details/7556595から