亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識(shí)庫 > Ruby中的迭代器詳解

Ruby中的迭代器詳解

熱門標(biāo)簽:巫師3地圖標(biāo)注魔力之所 外呼線路從哪里出來的 柯城手機(jī)地圖如何做地圖標(biāo)注 淮安自動(dòng)外呼系統(tǒng)供應(yīng)商 AI電銷機(jī)器人 線路 漯河電銷 中牟外呼系統(tǒng)違法嗎 天津外呼系統(tǒng)怎么收費(fèi) 征服者企業(yè)地圖標(biāo)注

D瓜哥最近想做一個(gè)網(wǎng)站,另外,老早就有學(xué)習(xí)一門動(dòng)態(tài)語言的想法,滿足著兩個(gè)條件的編程語言中,Ruby、Python是最合適的兩種語言。現(xiàn)在Ruby on Rails如日中天,光芒萬丈!所以,就選定了Ruby,從零開始學(xué)習(xí)。

  前天看了Ruby的迭代器,對于我這個(gè)只學(xué)過Java、C/C++等的人來說,絕對是眼前一亮的感覺!而且是光彩奪目:沒想到迭代器還可以這么玩,太簡練太方便而且特別強(qiáng)大!然后,D瓜哥就迫不及待的想寫一篇文章給大家介紹介紹Ruby的迭代器!

迭代器簡介

先簡單介紹一下迭代器。

1.一個(gè)Ruby迭代器就是一個(gè)簡單的能接收代碼塊的方法(比如each這個(gè)方法就是一個(gè)迭代器)。特征:如果一個(gè)方法里包含了yield調(diào)用,那這個(gè)方法肯定是迭代器;

2.迭代器方法和塊之間有如下傳遞關(guān)系:塊被當(dāng)成一個(gè)特殊參數(shù)傳給迭代器方法,而迭代器方法內(nèi)部在使用yield調(diào)用代碼塊時(shí)可將參數(shù)值傳入塊;

3.實(shí)際上,迭代器的功能就是一種回調(diào)!迭代器方法所屬的類只負(fù)責(zé)遍歷需要遍歷的元素,而對元素所做的處理則通過回調(diào)代碼塊來實(shí)現(xiàn);

4.Ruby中的容器對象(如數(shù)組、Range和Hash對象等)都包含了兩個(gè)簡單的迭代器,分別是each和collect。each可以認(rèn)為是最簡單的迭代器,它會(huì)對集合的每個(gè)元素調(diào)用塊。 collect,將容器中的元素傳遞給一個(gè)塊,在塊中處理后返回一個(gè)包含處理結(jié)果的新數(shù)組;

迭代器詳解

  Ruby中的迭代器可以說五花八門,下面我們從字符串、數(shù)字、數(shù)組、Map、文件、目錄等幾個(gè)方面來簡單介紹一下Ruby的迭代器。

字符串迭代器

  在Java中,字符串類型的數(shù)據(jù)沒有迭代器。所以,如果需要“遍歷”字符串,需要將字符串做一些其他處理才行。但是,在Ruby中就有。下面,我們通過代碼來演示一下:

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

str = "abc"
str.each_byte {|c| printf ">%c", c};  #

# 輸出如下:(為了和代碼區(qū)別,D瓜哥在輸出前面人為地加了#。)
# 以下的輸出展示,處理方式相同。
#>a>b>c

each_byte 是字串中用于處理每個(gè)字節(jié)的迭代器。每個(gè)字節(jié)都會(huì)代入塊參數(shù) c 中。

Ruby中,不僅有用于字節(jié)的迭代器,還有用于每行的迭代器。示例如下:

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

str = "abc\nefg\nhijk"
str.each_line{|l| print l}

# 輸出如下:
#abc
#efg
#hijk

怎么樣,是不是被Ruby簡練但強(qiáng)大的迭代器所折服?!好戲還在后面,接著向下看。

數(shù)字迭代器

  在Ruby中,“一切皆為對象”,甚至數(shù)字也是對象。這點(diǎn)和Java不一樣。所以,對字的迭代器,對于我這個(gè)Java程序猿也是聞所未聞。讓我們寫兩個(gè)示例,管窺一二。

  第一個(gè)場景:對某段代碼進(jìn)行N(比如5)次操作。在Java中,需要寫個(gè)循環(huán),但是在Ruby中,只需要調(diào)用一下times方法即可。代碼如下:

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

5.times {print "I love https://www.jb51.net/ \n"} # 真的就這么簡單

# 輸出如下:
#I love https://www.jb51.net/
#I love https://www.jb51.net/
#I love https://www.jb51.net/
#I love https://www.jb51.net/
#I love https://www.jb51.net/

第二個(gè)場景:求1到5的數(shù)字之和。這個(gè)也特別簡單:

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

sum = 0
(1..5).each {|i| sum += i}
print "Sum="+sum.to_s

如果使用upto函數(shù),還可以這樣寫:

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

sum = 0
1.upto(5) {|x| sum += x }
print "Sum="+sum.to_s

 有時(shí),我們的步進(jìn)不一定是1,可能是2,例如奇數(shù)和。這種情況下,可以使用step函數(shù)。代碼如下:

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

sum = 0  
1.step(5, 2) do |y| # step函數(shù)第二個(gè)參數(shù)是步進(jìn)。
   sum += y  
end 
print "Sum="+sum.to_s

感覺有點(diǎn)扯遠(yuǎn)了。下面,我們講講數(shù)組相關(guān)的迭代器。

數(shù)組迭代器

見識(shí)過了數(shù)字相關(guān)的迭代器,我們再看看數(shù)組相關(guān)的迭代器。

第一個(gè)場景:便利數(shù)組并輸出每個(gè)元素。直接上代碼:

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

languages = ['Ruby', 'Javascript', 'Java']
languages.each_with_index do |lang, i|
    puts "#{i}, I love #{lang}!"
end

#輸出如下:
#0, I love Ruby!
#1, I love Javascript!
#2, I love Java!

  有時(shí),我們需要對數(shù)組的元素做出一個(gè)挑選,這時(shí)可以這樣干:

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

# 找出符合條件的值
b = [1,2,3].find_all{ |x| x % 2 == 1 }
# b的值是 [1,3]

 有時(shí),我們需要?jiǎng)h除數(shù)組中的某些值。這時(shí):

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

# 迭代并根據(jù)條件刪除
a = [51, 101, 256]
a.delete_if {|x| x >= 100 }
# a的值是 [51]

再來一個(gè)例子:

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

# 找出最長字串find the longest word
longest = ["cat", "sheep", "bear"].inject do |memo,word|
    ( memo.length > word.length )? memo : word
end
puts longest

#輸出如下:
#sheep

Map迭代器

  在Java中,如果相對Map使用迭代器,必須把Map轉(zhuǎn)化成List類型的容器才行。但是,在Ruby中,有直接針對Map的迭代器,很好很方便:

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

sum = 0
outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each{|item, price|
 sum += price
}
print "Sum="+sum.to_s

甚至,我們還可以這樣:

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

sum = 0
outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each{|pair|
 sum += pair[1] # 讀取值
}
print "Sum="+sum.to_s

這里說明一下:上述程序使用了pair[1]讀取Map的值,如果要讀取Map的鍵時(shí)則寫成pair[0]。

如果需要輸出Map的Key,可以這樣:

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

outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each_key do |k|
 puts k
end

如果需要輸出Map的value,則可以這樣:

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

outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each_value do |v|
 puts v
end

文件迭代器

  實(shí)在是沒有想到,對于文件,Ruby也有迭代器可用。如下:

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

f = File.open("sample.txt")
f.each{|line|
 print line
}
f.close

其實(shí),我們可以使用代碼塊來進(jìn)行同樣的操作:

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

File.open("str.rb", "r") do |file|
    file.each{|line|
  print line
 }
end

使用代碼塊,不需要手動(dòng)close。這個(gè)推薦!

目錄迭代器

很多時(shí)候,我們需要列出某個(gè)目錄下的文件列表,設(shè)置對每個(gè)文件進(jìn)行操作,這時(shí)也需要迭代器。Ruby也考慮到了:

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

Dir.foreach("c://") do |file|  # 請根據(jù)自己的系統(tǒng)類型,做適當(dāng)?shù)男薷?br />  puts file
end

#輸出太多,就不貼結(jié)果了。可以自己運(yùn)行一下看看

結(jié)尾

  通過上面的介紹可以看出,Java和Ruby相比,在迭代器方面簡直是弱爆了!當(dāng)然,D瓜哥剛剛開始學(xué)習(xí)Ruby,文中有不當(dāng)甚至解釋錯(cuò)誤的地方,勞煩指出,D瓜哥會(huì)盡快改正的。

您可能感興趣的文章:
  • Ruby中Block和迭代器的使用講解
  • 舉例講解Ruby中迭代器Iterator的用法
  • 簡要說明Ruby中的迭代器
  • Ruby迭代器的7種技巧分享
  • js 數(shù)組實(shí)現(xiàn)一個(gè)類似ruby的迭代器
  • ruby 迭代器使用方法
  • Ruby 迭代器知識(shí)匯總

標(biāo)簽:克拉瑪依 內(nèi)江 大慶 西雙版納 棗莊 河池 南昌 甘孜

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby中的迭代器詳解》,本文關(guān)鍵詞  Ruby,中的,迭代,器,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ruby中的迭代器詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ruby中的迭代器詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产视频网站在线观看| 国产韩国精品一区二区三区| 午夜在线亚洲| 99色视频在线观看| 91麻豆精品国产高清在线| 欧美激情在线精品video| 欧美a级成人淫片免费看| 欧美国产日韩在线| 国产极品白嫩美女在线观看看| 国产不卡在线播放| 韩国三级一区| 国产亚洲精品aaa大片| 精品久久久久久中文字幕2017| 高清一级淫片a级中文字幕 | 日韩中文字幕在线亚洲一区| 天天做日日爱| 沈樵在线观看福利| 欧美激情一区二区三区视频 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产高清在线精品一区a| 日日日夜夜操| 国产综合成人观看在线| 青青青草视频在线观看| 国产激情一区二区三区| 国产亚洲免费观看| 一级毛片视频在线观看| 亚欧视频在线| 日日日夜夜操| 精品久久久久久影院免费| 国产不卡在线观看视频| 国产不卡在线观看视频| 国产91素人搭讪系列天堂| 欧美a免费| 国产不卡福利| 精品国产三级a| 麻豆网站在线免费观看| 久久国产精品只做精品| 欧美爱爱动态| 国产一区二区精品久久91| 九九精品在线播放| 国产成人精品在线| 国产视频网站在线观看| 国产网站在线| 国产不卡福利| 国产一区免费观看| 九九久久99| 久久精品大片| 尤物视频网站在线| 一a一级片| 天天做日日爱| 国产网站在线| 青青青草视频在线观看| 日本在线不卡免费视频一区| 毛片高清| 91麻豆精品国产高清在线| 美女免费精品视频在线观看| 国产网站免费视频| 99久久精品国产片| 一级毛片视频播放| 精品在线观看国产| 欧美一区二区三区在线观看| 日日夜夜婷婷| 国产麻豆精品免费视频| 国产亚洲免费观看| 九九国产| 日本免费区| 免费一级片在线| 国产一区二区精品久| 久久99青青久久99久久| 久草免费资源| 国产伦理精品| 四虎影视库国产精品一区| 日本在线不卡免费视频一区| 天天色成人网| 久久精品店| a级黄色毛片免费播放视频| 999精品在线| 亚洲 激情| 夜夜操网| 国产韩国精品一区二区三区| 九九精品在线播放| 九九精品在线播放| 免费一级片在线| 欧美激情伊人| 国产一区二区精品久| 日韩在线观看免费| 亚洲天堂在线播放| 久久久久久久久综合影视网| 久久久成人网| 九九精品在线播放| 国产a视频| 久久精品店| 成人免费观看男女羞羞视频| 日韩avdvd| 黄色短视屏| 日韩中文字幕在线播放| 国产极品白嫩美女在线观看看| 欧美激情在线精品video| 91麻豆精品国产自产在线| 一级片免费在线观看视频| 一级毛片视频在线观看| 美女免费精品视频在线观看| 久久99中文字幕久久| 国产成a人片在线观看视频| 精品国产一区二区三区免费| 国产视频网站在线观看| 99久久精品国产高清一区二区| 麻豆系列 在线视频| 精品国产一区二区三区国产馆| 99久久精品国产高清一区二区| 日韩一级精品视频在线观看| 国产不卡福利| 天天做日日爱| 国产不卡精品一区二区三区| 成人a级高清视频在线观看| 精品视频在线看| 国产精品1024在线永久免费 | 日本免费区| 999精品在线| 天天做人人爱夜夜爽2020| 国产不卡在线观看视频| 日韩中文字幕一区| 国产不卡福利| 国产网站免费视频| 久久成人性色生活片| 久久精品免视看国产明星| 国产伦精品一区二区三区无广告| 麻豆网站在线免费观看| 一级毛片视频在线观看| 黄视频网站在线看| 久久99中文字幕久久| 国产麻豆精品| 国产网站在线| 九九精品久久久久久久久| 久久久成人网| 99色视频| 青青久久精品| 高清一级淫片a级中文字幕 | 沈樵在线观看福利| 国产高清在线精品一区a| 国产不卡精品一区二区三区| 韩国三级视频网站| 一本高清在线| 四虎久久精品国产| 青青久久精品| 午夜欧美福利| 亚洲第一页乱| 91麻豆精品国产自产在线观看一区 | 成人高清视频在线观看| 国产美女在线一区二区三区| 99久久精品国产高清一区二区| 欧美大片aaaa一级毛片| 999精品在线| 青草国产在线观看| 韩国毛片| 一级毛片视频播放| 国产一区免费观看| 国产一区二区福利久久| 高清一级毛片一本到免费观看| 99热热久久| 精品国产香蕉在线播出| 久久精品大片| 天天做日日爱夜夜爽| 欧美激情一区二区三区中文字幕| 在线观看导航| 国产91视频网| 亚久久伊人精品青青草原2020| 欧美一区二区三区在线观看| 九九久久99| 国产亚洲免费观看| 成人在激情在线视频| 美国一区二区三区| 国产综合成人观看在线| 国产91精品系列在线观看| 久草免费资源| 日韩字幕在线| 夜夜操网| 精品在线观看国产| 高清一级毛片一本到免费观看| 欧美一级视频免费| 精品国产一区二区三区国产馆| 天天做日日爱| 日韩中文字幕在线播放| 91麻豆精品国产高清在线| 午夜在线影院| 国产激情一区二区三区| 精品视频在线观看一区二区| 欧美激情一区二区三区在线| 国产成人精品影视| 91麻豆tv| 国产视频网站在线观看| 麻豆系列 在线视频| 99久久精品国产片| 国产美女在线一区二区三区| 黄视频网站免费看| 亚洲第一页乱| 一级毛片视频在线观看| 国产欧美精品| 韩国毛片免费| 亚欧视频在线|