成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Lua中table的遍歷詳解

Lua中table的遍歷詳解

熱門標簽:地圖標注大廈 怎么去除地圖標注 新岸線智能電銷機器人 個人怎么在地圖標注需要的店鋪 百度地圖標注早餐區(qū)域 武漢外呼防封系統(tǒng)多少錢 漳州智云呼電話機器人 冀州市地圖標注 清朝地圖標注哈爾濱

當(dāng)我在工作中使用lua進行開發(fā)時,發(fā)現(xiàn)在lua中有4種方式遍歷一個table,當(dāng)然,從本質(zhì)上來說其實都一樣,只是形式不同,這四種方式分別是:

復(fù)制代碼 代碼如下:

for key, value in pairs(tbtest) do 
    XXX 
end
 
for key, value in ipairs(tbtest) do 
    XXX 
end
 
for i=1, #(tbtest) do 
    XXX 
end
 
for i=1, table.maxn(tbtest) do 
    XXX 
end

前兩種是泛型遍歷,后兩種是數(shù)值型遍歷。當(dāng)然你還會說lua的table遍歷還有很多種方法啊,沒錯,不過最常見的這些遍歷確實有必要弄清楚。

這四種方式各有特點,由于在工作中我?guī)缀趺刻於紩褂帽闅vtable的方法,一開始也非常困惑這些方式的不同,一段時間后才漸漸明白,這里我也是把自己的一點經(jīng)驗告訴大家,對跟我一樣的lua初學(xué)者也許有些幫助(至少當(dāng)初我在寫的時候在網(wǎng)上就找了很久,不知道是因為大牛們都認為這些很簡單,不需要說,還是因為我笨,連這都要問)。

首先要明確一點,就是lua中table并非像是C/C++中的數(shù)組一樣是順序存儲的,準確來說lua中的table更加像是C++中的map,通過Key對應(yīng)存儲Value,但是并非順序來保存key-value對,而是使用了hash的方式,這樣能夠更加快速的訪問key對應(yīng)的value,我們也知道hash表的遍歷需要使用所謂的迭代器來進行,同樣,lua也有自己的迭代器,就是上面4種遍歷方式中的pairs和ipairs遍歷。但是lua同時提供了按照key來遍歷的方式(另外兩種,實質(zhì)上是一種),正式因為它提供了這種按key的遍歷,才造成了我一開始的困惑,我一度認為lua中關(guān)于table的遍歷是按照我table定義key的順序來的。
下面依次來講講四種遍歷方式,首先來看for k,v in pairs(tbtest) do這種方式:
先看效果:

復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [4] = 4, 
}
 
for key, value in pairs(tbtest) do 
    print(value) 
end

我認為輸出應(yīng)該是1,2,3,4,實際上的輸出是1,2,4,3。我因為這個造成了一個bug,這是后話。

也就是說for k,v in pairs(tbtest) do 這樣的遍歷順序并非是tbtest中table的排列順序,而是根據(jù)tbtest中key的hash值排列的順序來遍歷的。

當(dāng)然,同時lua也提供了按照key的大小順序來遍歷的,注意,是大小順序,仍然不是key定義的順序,這種遍歷方式就是for k,v in ipairs(tbtest) do。
for k,v in ipairs(tbtest) do 這樣的循環(huán)必須要求tbtest中的key為順序的,而且必須是從1開始,ipairs只會從1開始按連續(xù)的key順序遍歷到key不連續(xù)為止。

復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [5] = 5, 
}
 
for k,v in ipairs(tbtest) do 
    print(v) 
end

只會打印1,2,3。而5則不會顯示。
復(fù)制代碼 代碼如下:

local tbtest = { 
    [2] = 2, 
    [3] = 3, 
    [5] = 5, 
}
 
for k,v in ipairs(tbtest) do 
    print(v) 
end

這樣就一個都不會打印。
 
第三種遍歷方式有一種神奇的符號'#',這個符號的作用是是獲取table的長度,比如:
復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 

print(#(tbtest))

打印的就是3
復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [6] = 6, 

print(#(tbtest))

這樣打印的就是2,而且和table內(nèi)的定義順序沒有關(guān)系,無論你是否先定義的key為6的值,‘#'都會查找key為1的值開始。
如果table的定義是這樣的:
復(fù)制代碼 代碼如下:

tbtest = { 
    ["a"] = 1, 
    [2] = 2, 
    [3] = 3, 
}
 
print(#(tbtest))

那么打印的就是0了。因為‘#'沒有找到key為1的值。同樣:
復(fù)制代碼 代碼如下:

tbtest = { 
    [“a”] = 1, 
    [“b”] = 2, 
    [“c”] = 3, 

print(#(tbtest))

打印的也是0
所以,for i=1, #(tbtest) do這種遍歷,只能遍歷當(dāng)tbtest中存在key為1的value時才會出現(xiàn)結(jié)果,而且是按照key從1開始依次遞增1的順序來遍歷,找到一個遞增不是1的時候就結(jié)束不再遍歷,無論后面是否仍然是順序的key,比如:

table.maxn獲取的只針對整數(shù)的key,字符串的key是沒辦法獲取到的,比如:

復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 

print(table.maxn(tbtest))
 
 
tbtest = { 
    [6] = 6, 
    [1] = 1, 
    [2] = 2, 

print(table.maxn(tbtest))

這樣打印的就是3和6,而且和table內(nèi)的定義順序沒有關(guān)系,無論你是否先定義的key為6的值,table.maxn都會獲取整數(shù)型key中的最大值。
如果table的定義是這樣的:
復(fù)制代碼 代碼如下:

tbtest = { 
    ["a"] = 1, 
    [2] = 2, 
    [3] = 3, 

print(table.maxn(tbtest))

那么打印的就是3了。如果table是:
復(fù)制代碼 代碼如下:

tbtest = { 
    [“a”] = 1, 
    [“b”] = 2, 
    [“c”] = 3, 

print(table.maxn(tbtest)) 
print(#(tbtest))

那么打印的就全部是0了。

換句話說,事實上因為lua中table的構(gòu)造表達式非常靈活,在同一個table中,你可以隨意定義各種你想要的內(nèi)容,比如:

復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    ["a"] = 4, 
    ["b"] = 5, 
}

同時由于這個靈活性,你也沒有辦法獲取整個table的長度,其實在coding的過程中,你會發(fā)現(xiàn),你真正想要獲取整個table長度的地方幾乎沒有,你總能采取一種非常巧妙的定義方式,把這種需要獲取整個table長度的操作避免掉,比如:
復(fù)制代碼 代碼如下:

tbtest = { 
    tbaaa = { 
        [1] = 1, 
        [2] = 2, 
        [3] = 3, 
    }, 
    ["a"] = 4, 
    ["b"] = 5, 
}

你可能會驚訝,上面這種table該如何遍歷呢?
復(fù)制代碼 代碼如下:

for k, v in pairs(tbtest) do 
    print(k, v) 
end

輸出是:a 4 b 5 tbaaa table:XXXXX。
由此你可以看到,其實在table中定義一個table,這個table的名字就是key,對應(yīng)的內(nèi)容其實是table的地址。
當(dāng)然,如果你用
復(fù)制代碼 代碼如下:

for k, v in ipairs(tbtest) do 
    print(k,v) 
end

來遍歷的話,就什么都不會打印,因為沒有key為1的值。但當(dāng)你增加一個key為1的值時,ipairs只會打印那一個值,現(xiàn)在你明白ipairs是如何工作的吧。

既然這里談到了遍歷,就說一下目前看到的幾種針對table的遍歷方式:

for i=1, #tbtest do --這種方式無法遍歷所有的元素,因為'#'只會獲取tbtest中從key為1開始的key連續(xù)的那幾個元素,如果沒有key為1,那么這個循環(huán)將無法進入
for i=1, table.maxn(tbtest) do --這種方式同樣無法遍歷所有的元素,因為table.maxn只會獲取key為整數(shù)中最大的那個數(shù),遍歷的元素其實是查找tbtest[1]~tbtest[整數(shù)key中最大值],所以,對于string做key的元素不會去查找,而且這么查找的效率低下,因為如果你整數(shù)key中定義的最大的key是10000,然而10000以下的key沒有幾個,那么這么遍歷會浪費很多時間,因為會從1開始直到10000每一個元素都會查找一遍,實際上大多數(shù)元素都是不存在的,比如:

復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [10000] = 2, 

local count = 0 
for i=1, table.maxn(tbtest) do 
    count = count + 1 
    print(tbtest[i]) 
end 
print(count)

你會看到打印結(jié)果是多么的坑爹,只有1和10000是有意義的,其他的全是nil,而且count是10000。耗時非常久。一般我不這么遍歷。但是有一種情況下又必須這么遍歷,這個在我的工作中還真的遇到了,這是后話,等講完了再談。

復(fù)制代碼 代碼如下:

for k, v in pairs(tbtest) do

這個是唯一一種可以保證遍歷tbtest中每一個元素的方式,別高興的太早,這種遍歷也有它自身的缺點,就是遍歷的順序不是按照tbtest定義的順序來遍歷的,這個前面講到過,當(dāng)然,對于不需要順序遍歷的用法,這個是唯一可靠的遍歷方式。
復(fù)制代碼 代碼如下:

for k, v in ipairs(tbtest) do

這個只會遍歷tbtest中key為整數(shù),而且必須從1開始的那些連續(xù)元素,如果沒有1開始的key,那么這個遍歷是無效的,我個人認為這種遍歷方式完全可以被改造table和for i=1, #(tbtest) do的方式來代替,因為ipairs的效果和'#'的效果,在遍歷的時候是類似的,都是按照key的遞增1順序來遍歷。

好,再來談?wù)劄槭裁次倚枰褂胻able.maxn這種非常浪費的方式來遍歷,在工作中, 我遇到一個問題,就是需要把當(dāng)前的周序,轉(zhuǎn)換成對應(yīng)的獎勵,簡單來說,就是從一個活動開始算起,每周的獎勵都不是固定的,比如1~4周給一種獎勵,5~8周給另一種獎勵,或者是一種排名獎勵,1~8名給一種獎勵,9~16名給另一種獎勵,這種情況下,我根據(jù)長久的C語言的習(xí)慣,會把table定義成這個樣子:

復(fù)制代碼 代碼如下:

tbtestAward = { 
    [8] = 1, 
    [16] = 3, 
}

這個代表,1~8給獎勵1,9~16給獎勵3。這樣定義的好處是獎勵我只需要寫一次(這里的獎勵用數(shù)字做了簡化,實際上獎勵也是一個大的table,里面還有非常復(fù)雜的結(jié)構(gòu))。然后我就遇到一個問題,即我需要根據(jù)周序數(shù),或者是排名序數(shù)來確定給哪一種獎勵,比如當(dāng)前周序數(shù)是5,那么我應(yīng)該給我定義好的key為8的那一檔獎勵,或者當(dāng)前周序數(shù)是15,那么我應(yīng)該給獎勵3。由此讀者看出,其實我定義的key是一個分界,小于這個key而大于上一個key,那么就給這個key的獎勵,這就是我判斷的條件。邏輯上沒有問題,但是lua的遍歷方式卻把我狠狠地坑了一把。讀者可以自己想一想我上面介紹的4種遍歷方式,該用哪一種來實現(xiàn)我的這種需求呢?這個函數(shù)的大致框架如下:
復(fù)制代碼 代碼如下:

function GetAward(nSeq) 
    for 遍歷整個獎勵表 do 
        if 滿足key的條件 then 
            return 返回對應(yīng)獎勵的key 
        end 
    end 
    return nil 
end

我也不賣關(guān)子了,分別來說一說吧,首先因為我的key不是連續(xù)的,而且沒有key為1的值,所以ipairs和'#'遍歷是沒用的。這種情況下理想的遍歷貌似是pairs,因為它會遍歷我的每一個元素,但是讀者不要忘記了,pairs遍歷并非是按照我定義的順序來遍歷,如果我真的使用的條件是:序數(shù)nSeq小于這個key而大于上一個key,那么就返回這個key。那么我無法保證程序執(zhí)行的正確性,因為key的順序有可能是亂的,也就是有可能先遍歷到的是key為16的值,然后才是key為8的值。
這么看來我只剩下table.maxn這么一種方式了,于是我寫下了這種代碼:
復(fù)制代碼 代碼如下:

for i=1, table.maxn(tbtestAward) do 
    if tbtestAward[i] ~= nil then 
        if nSeq = i then 
            return i 
        end 
    end 
end 

這么寫效率確實低下,因為實際上還是遍歷了從key為1開始直到key為table.maxn中間的每一個值,不過能夠滿足我上面的要求。當(dāng)時我是這么實現(xiàn)的,因為這個獎勵表會不斷的發(fā)生變化,這樣我每次修改只需要修改這個獎勵表就能夠滿足要求了,后來我想了想,覺得其實我如果自己再定義一個序數(shù)轉(zhuǎn)換成對應(yīng)的獎勵數(shù)種類的表就可以避免這種坑爹的操作了,不過如果獎勵發(fā)生修改,我需要統(tǒng)一排查的地方就不止這個獎勵表了,權(quán)衡再三,我還是沒有改,就這么寫了。沒辦法,不斷變化的需求已經(jīng)把我磨練的忘記了程序的最高理想。我甚至愿意犧牲算法的效率而去追求改動的穩(wěn)定性。在此哀悼程序員的無奈。我這種時間換空間的做法確實不知道好不好。

后來我在《Programming In Lua》中看到了一個神奇的迭代器,使用它就可以達到我想要的這種遍歷方式,而且不需要去遍歷那些不存在的key。它的方法是把你所需要遍歷的table里的key按照遍歷順序放到另一個臨時的table中去,這樣只需要遍歷這個臨時的table按順序取出原table中的key就可以了。如下:

首先定義一個迭代器:

復(fù)制代碼 代碼如下:

function pairsByKeys(t) 
    local a = {} 
    for n in pairs(t) do 
        a[#a+1] = n 
    end 
    table.sort(a) 
    local i = 0 
    return function() 
        i = i + 1 
        return a[i], t[a[i]] 
    end 
end

然后在遍歷的時候使用這個迭代器就可以了,table同上,遍歷如下:
復(fù)制代碼 代碼如下:

for key, value in pairsByKeys(tbtestAward) do 
    if nSeq = key then 
        return key 
    end 
end

并且后來我發(fā)現(xiàn)有了這個迭代器,我根本不需要先做一步獲取是哪一檔次的獎勵的操作,直接使用這個迭代器進行發(fā)獎就可以了。大師就是大師,我怎么就沒想到呢!
還有些話我還沒有說,比如上面數(shù)值型遍歷也并非是像看起來那樣進行遍歷的,比如下面的遍歷:
復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [5] = 5, 
}
 
for i=1, #(tbtest) do 
    print(tbtest[i]) 
end

打印的順序是:1,2,3。不會打印5,因為5已經(jīng)不在table的數(shù)組數(shù)據(jù)塊中了,我估計是被放到了hash數(shù)據(jù)塊中,但是當(dāng)我修改其中的一些key時,比如:
復(fù)制代碼 代碼如下:

tbtest = { 
    [1] = 1, 
    [2] = 2, 
    [4] = 4, 
    [5] = 5, 
}
 
for i=1, #(tbtest) do 
    print(tbtest[i]) 
end

打印的內(nèi)容卻是:1,2,nil,4,5。這個地方又遍歷到了中間沒有的key值,并且還能繼續(xù)遍歷下去。我最近正在看lua源碼中table的實現(xiàn)部分,已經(jīng)明白了是怎么回事,不過我想等我能夠更加清晰的闡述lua中table的實現(xiàn)過程了再向大家介紹。用我?guī)煾档脑捳f就是不要使用一些未定義的行為方法,避免在工作中出錯,不過工作外,我還是希望能明白未定義的行為中那些必然性,o(︶︿︶)o 唉!因果論的孩子傷不起。等我下一篇博文分析lua源碼中table的實現(xiàn)就能夠更加清晰的說明這些了。

您可能感興趣的文章:
  • 深入談?wù)刲ua中神奇的table
  • Lua Table轉(zhuǎn)C# Dictionary的方法示例
  • Lua中設(shè)置table為只讀屬性的方法詳解
  • Lua編程示例(一):select、debug、可變參數(shù)、table操作、error
  • 舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu)
  • Lua table中安全移除元素的方法
  • Lua的table庫函數(shù)insert、remove、concat、sort詳細介紹
  • C++遍歷Lua table的方法實例
  • Lua中釋放table占用內(nèi)存的方法
  • Lua中獲取table長度問題探討
  • Lua中獲取table長度的方法
  • Lua中table里內(nèi)嵌table的例子
  • Lua面向?qū)ο缶幊讨A(chǔ)結(jié)構(gòu)table簡例

標簽:宣城 濰坊 儋州 臺灣 天門 金昌 天門 德宏

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Lua中table的遍歷詳解》,本文關(guān)鍵詞  Lua,中,table,的,遍歷,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua中table的遍歷詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua中table的遍歷詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    av亚洲精华国产精华| 在线观看国产精品淫| 美国做受三级的视频播放| 五十路熟女丰满大屁股| 国模极品一区二区三区| 尤物网站在线看| 国内免费久久久久久久久久久| 国产成人精品www牛牛影视| 日韩av片免费观看| 亚洲一级一区| 精品国内自产拍在线观看视频| 中文字幕人妻熟女在线| 在线综合视频| 国产 中文 字幕 日韩 在线| 国产中文精品久高清在线不| 黄色成人羞羞视频| 嫩草香蕉在线91一二三区| 男人最爱成人网| 亚洲三区在线播放| 欧美影院久久久| 久久综合一区二区三区| 久久不射中文字幕| 日韩中文字幕在线| 五十路在线视频| 国产一区二区三区四区五区3d| 成人三级伦理片| 激情小说亚洲| 国产精品视频导航| 无码人妻aⅴ一区二区三区69岛| 少妇与大狼拘作爱性a| 亚洲国产精品成人一区二区| 亚洲精品tv久久久久久久久| 在线看视频不卡| 欧美性感美女一区二区| 日韩有码在线观看| 欧美日韩在线播放三区四区| 欧美在线免费一级片| 亚洲一区二区三区中文字幕| 国产偷窥洗澡视频| 国产一级黄色片免费| 久久久久久网址| 午夜探花在线观看| 精品国产免费人成电影在线观看四季| 91高清视频在线免费观看| 国产农村妇女毛片精品久久莱园子| 91麻豆精品国产91久久久久推荐资源| 伊人伊成久久人综合网小说| 精品无码久久久久国产| 91精品国产综合久久精品性色| 午夜伦理大片视频在线观看| 久久久久久久av麻豆果冻| 亚洲激情视频在线播放| 精品一区二区三区三区| 国产精品乱码一区二三区小蝌蚪| 久久久久久69| 日韩成人一级| 欧美日韩中文字幕一区二区三区| 伊伊综合在线| 色噜噜狠狠一区二区三区狼国成人| 欧美一区二区国产| 久久成人免费观看| 草草影院在线观看| 日本三级黄色网址| av三级在线播放| 黄页免费在线观看| 美女网站色精品尤物极品姐弟| 亚洲精品国产精品乱码不99按摩| 日韩精品成人一区二区在线观看| 黄色精品网站| 国产精品久久久毛片| 在线观看免费成人| 精品乱码一区二区三区| 超碰国产在线观看| 2222www色视频在线观看| 国产精品久久久久9999吃药| 一本综合精品| 久久成人一区二区| 国产精国产精品| 中文字幕久久午夜不卡| 亚洲精品乱码久久久久久按摩观| 交100部在线观看| 奇米影音第四色| 美女流白浆视频| 黄色漫画在线免费看| 青青青国产在线视频| 免费在线黄色影片| 最近2019年好看中文字幕视频| 国产精品美女久久久久av爽李琼| 色婷婷成人在线| 欧美激情中文字幕一区二区| 精品久久久久久中文字幕一区奶水| 亚洲国产精品女人| 成人av电影免费在线播放| 爽爽爽爽爽爽爽成人免费观看| 欧美激情一区二区三区在线视频| 黑人另类精品××××性爽| 黄色网页大全| 91精品蜜臀在线一区尤物| 日本高清中文字幕在线| 亚洲三级电影在线观看| 午夜国产视频| 国产精品69久久久| 午夜精品99久久免费| 第四色男人最爱上成人网| 欧美夜福利tv在线| 亚洲欧洲一区二区在线观看| 国产一区二区在线| 成年人二级毛片| 日本美女高潮视频| 精品在线观看视频| va天堂va亚洲va影视| 日韩欧美亚洲范冰冰与中字| 欧美性猛交xxxxxxxx| 亚洲tv在线观看| 一区二区动漫| 亚洲精蜜桃久在线| 先锋a资源在线看亚洲| 日韩在线观看免费高清| 五月激情六月婷婷| 成人午夜av电影| 91官网在线观看| 在线观看精品自拍私拍| 国产二区视频在线播放| 亚洲自拍偷拍精品| xxxxxx国产| 人妻精品无码一区二区三区| 亚洲一品av免费观看| 香蕉视频911| 久操视频在线免费播放| 伊人久久五月天| 久久精品无码一区二区三区| 欧美日韩不卡一区二区| 在线观看免费91| 亚洲免费av在线| 欧美韩国亚洲| 国产国产人免费人成免费视频| 亚洲奶大毛多的老太婆| 精品亚洲男同gayvideo网站| 国产亚洲成aⅴ人片在线观看| 三级久久三级久久| 欧美日韩高清一区二区| 91精品国产一区二区人妖| 国产美女高潮一区二区三区| 一区二区久久久久久| 精品国产aⅴ麻豆| 欧日韩在线视频| 久久久蜜桃精品| 99麻豆久久久国产精品免费优播| 激情丁香在线| 成人免费视频网站入口::| 亚洲欧美日韩精品久久亚洲区| eeuss影院eeuss最新直达| 国产xxxxx在线观看| 亚洲爆乳无码专区| 久久久五月婷婷| 成人美女免费网站视频| 黄色91在线观看| 亚洲少妇诱惑| 国产在线观看18| 亚洲成a人无码| 亚洲日本精品一区| 欧美日韩午夜视频| 成人午夜电影网站| 中文字幕欧美人妻精品| 亚洲成人网在线播放| 日韩黄色一级大片| 青青青草原在线| 九一精品在线观看| 五月婷婷狠狠操| 中文字幕一区二区不卡| 久久久久久久九九九九| 久久视频在线观看中文字幕| 极品美鲍一区| 欧美视频在线观看一区二区| 欧美成人手机视频| 国产黄在线观看免费观看不卡| 久久精品免费播放| 性欧美freehd18| 青檬在线电视剧在线观看| 鲁一鲁一鲁一鲁一色| 久久精品国产一区二区三| 精品亚洲国产成av人片传媒| 亚洲电影影音先锋| 日韩精品极品毛片系列视频| 一本色道久久99精品综合| 麻豆成人在线观看| 日韩欧美色综合网站| 国产精品超碰97尤物18| 韩剧1988在线观看免费完整版| 久草热久草热线频97精品| 91成人在线免费观看| 欧美不卡高清一区二区三区| 91精品网站在线观看| 一区二区三区国产精华| 午夜精品久久久久久久99樱桃| 欧美性videosxxxxx| 日韩一区二区在线视频| 老牛嫩草一区二区三区日本| 国产自产视频一区二区三区| 国产 欧美在线| 蜜桃成人在线| 人体私拍套图hdxxxx| 日本中文字幕在线2020| 日韩欧美色视频| 91嫩草在线播放| 国产精品久久久久久久久久精爆| 午夜写真片福利电影网| 亚洲巨乳在线观看| 在线观看av的网址| 亚洲色图综合网| 情侣黄网站免费看| 久热视线观看免费视频| 无码专区aaaaaa免费视频| 中文字幕成人在线视频| 免费福利影院| 国产麻豆一区二区三区在线观看| 免费成人黄色网| 在线亚洲天堂| 国产成人丝袜美腿| 91高清视频免费| 亚洲黄色小说在线观看| 国产精久久一区二区三区| 一区二区免费电影| 欧美久色视频| 精品对白一区国产伦| 成人在线视频福利| 国产精品嫩草影视| 国产精品嫩草影院在线看| 国产91精品在线播放| 免费欧美一级视频| 精品国产乱码久久久久久闺蜜| 久久久精品网站| 欧美日韩精品免费在线观看视频| 欧美精品videosbestsex另类| 亚洲一级二级| 久久综合导航| 亚洲欧美在线一区| 久久影视中文字幕| av日韩中文字幕| 亚洲一区二区三区精品中文字幕| av毛片午夜不卡高**水| 777国产偷窥盗摄精品视频| 精品亚洲成av人在线观看| 亚洲精品鲁一鲁一区二区三区| 亚洲国产精品尤物yw在线观看| 毛片网站在线免费观看| 黄色裸体一级片| 日韩亚洲国产中文字幕欧美| 国产精品99久久久久久大便| 奇米四色中文综合久久| 亚洲奶大毛多的老太婆| 欧美国产小视频| 91麻豆国产香蕉久久精品| www成人免费| 亚洲成人tv| 老子影院午夜伦不卡大全| 黄色网址大全在线观看| 狠狠综合久久av| 在线亚洲伦理| 久草在线新免费首页资源站| 一级二级三级在线观看| 一区二区在线免费视频| 国产大片一区二区| 91精品91久久久久久| 欧美精品免费观看二区| 国产91网红主播在线观看| 毛片一级免费一级| 国产有色视频色综合| 先锋影音国产精品| 国产精品视频一区视频二区| 欧美一级搡bbbb搡bbbb| 99pao成人国产永久免费视频| 福利电影导航| 日av在线不卡| 中文字幕日本在线观看| 理论片鲁丝二区爱情网| 精品美女久久久| 人妻换人妻a片爽麻豆| 青青草手机在线观看| 另类图片亚洲另类| 四虎永久免费观看| 亚洲小视频在线观看| 亚洲成人激情综合网| 中文字幕在线2019| zzijzzij亚洲日本少妇熟睡| 国产三级伦理片| 亚洲欧洲美洲一区二区三区| 欧美日韩国产精品一区二区三区| 免费h视频网站| 亚洲色图一区二区| 久久亚洲精品中文字幕蜜潮电影| 欧美体内谢she精2性欧美| 一二三四在线观看免费高清中文在线观看| 男人的天堂av网站| 国产成人无码av在线播放dvd| 天天射综合网站| 免费黄网在线观看| 久久久久久久久久久视频| 日韩精品视频免费| 久久综合久久久久| 日韩午夜视频在线| 欧美视频不卡| 超碰在线国产97| 另类成人小视频在线| 妞干网2018| 91麻豆精品秘密| www.超碰在线观看| av天堂一区二区三区| 国产精品影院在线观看| 亚洲激情中文1区| 国产a级网站| 欧美狂野另类xxxxoooo| 中文字幕有码在线| 91超碰在线免费观看| 一区二区三区四区五区视频| 国产成年人视频网站| 色综合久久久久久久久| 日韩av在线精品| 91在线精品秘密一区二区| 国产一区导航| 青青精品视频播放| 日本中文字幕在线看| 蜜桃视频污在线观看| 69久久夜色精品国产69乱青草| 蜜桃免费网站一区二区三区| 免费在线欧美视频| 妖精视频一区二区三区免费观看| 亚洲午夜精品一区二区三区他趣|