Lua學習筆記 day5 陣列 迭代器

2021-09-02 19:32:19 字數 2428 閱讀 2205

lua陣列

特點:陣列中的元素的資料型別是相同的。

索引以整數表示,索引起始值為1.

陣列大小是不固定的。(不同於c中的陣列,與python中的list類似。)

一維陣列:

示例1:

arr =

for index = 0,2 do

print(arr[index])

end結果1:依次輸出nil, one, two。--輸出nil的原因是,陣列索引從1開始。

示例2:

arr = {}

for index = -2, 2 do

arr[index] = index * 2

end結果2:依次輸出:-4, -2, 0, 2, 4 --陣列索引可以是負數。

多維陣列:陣列中包含陣列。

lua迭代器

定義:迭代器(iterator):是一種物件,能夠用來遍歷標準模板庫容器中的部分或全部元素;

每個迭代器物件代表容器中的確定的位址;

常常用函式來描述迭代器,每次呼叫該函式,就返回集合的下乙個元素。

lua中的迭代器包含以下兩種型別:

無狀態的迭代器。

多狀態的迭代器。

泛型for迭代器:

特點:泛型for在自己內部儲存了:迭代函式、狀態常量、控制變數。

泛型for迭代器提供了集合的key/value對。

語法:for key, value in pairs(t) do

print(key, value)

end說明:

key, value:變數列表。

pairs(t):表示式列表。

示例:arr =

for key, value in ipairs(arr) do

print(key, value)

end結果:依次輸出: 1 one\n 2 two

說明:ipairs()是lua提供的預設的迭代函式。

泛型for的執行過程:

初始化,計算in後面表示式的值。表示式返回泛型for需要的三個值:迭代函式、狀態常量、控制變數。賦值過程與多賦值語句一樣。

將狀態常量和控制變數作為引數呼叫迭代函式。

將迭代函式的返回值,賦值給變數列表。

返回nil後,結束迴圈。

示例:arr =

for key, value in ipairs(arr) do print(value) end

結果:依次輸出one, two。--迭代函式返回nil後,迴圈結束,因此不會輸出three。

返回第2步繼續迴圈過程。

無狀態的迭代器:

特點:不保留任何狀態的迭代器;

避免了建立閉包花費額外的代價;

最典型的例子是:ipairs()

示例(實現數字n的平方):

function square(iteratormaxcount, currentnumber):

if (currentnumber < iteratormaxcount)

then

currentnumber = currentnumber + 1 

return currentnumber, currentnummber * currentnumber

endend

for index, value in square, 3, 0 do print(value) end

結果:依次輸出1, 4, 9

說明:square, 3, 0分別是泛型for中的迭代函式,狀態變數,控制變數。

多狀態的迭代器:

特點:不僅僅需要簡單的狀態常量和控制變數,還需要儲存多個狀態資訊。

儲存狀態資訊的方式:

閉包;將狀態資訊儲存到table內,將table作為迭代器的狀態常量。

示例(閉包):

function elemiterator(collection)

local index = 0

local count = #collection --獲取集合的元素個數

return function () --閉包函式;匿名函式,沒有引數。

index = index + 1

if index <= count

then

return collection[index]

endend

endarr =

for value in elemiterator(arr) do print(value) end

結果:依次輸出one, two, three。

說明:for迴圈執行前,elemiterator()先執行,返回閉包函式,作為迭代器函式;

for迴圈每次執行時,呼叫一次閉包函式。

ipairs和pairs和區別:

pairs: 迭代table,可以遍歷表中所有的key可以返回nil。

ipairs: 迭代陣列,不能返回nil,遇到nil則退出。

java學習筆記day5

面向過程 強調的是功能行為 物件導向 將功能封裝進物件,強調具備了功能的物件。面向過程 開啟冰箱 儲存進冰箱 關閉冰箱 物件導向 冰箱.開啟 冰箱.儲存 冰箱.關閉 物件導向 3個特徵 封裝 繼承 多型。找物件,建立物件,使用物件。維護物件的關係。類 描述。物件 實體。成員變數和區域性變數 作用範圍...

python學習筆記 day5

函式 返回值 描述 pow x,y x y 運算後的結果 sqrt x 返回 x 的平方根 abs x 返回數字的絕對值,如 abs 10 返回 10 fabs x 返回數字的絕對值,如 math.fabs 10 返回 10.0 ceil x 返回數字的上入整數,入 math.ceil 4.1 返回...

matlab cody學習筆記 day5

一些學習筆記 1 陣列的簡單賦值 例如 input n 5 output m is 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 兩個迴圈的源 function m timestables n m ones n,n for i...