欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Ruby中的迭代器詳解

Ruby中的迭代器詳解

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

D瓜哥最近想做一個網站,另外,老早就有學習一門動態語言的想法,滿足著兩個條件的編程語言中,Ruby、Python是最合適的兩種語言。現在Ruby on Rails如日中天,光芒萬丈!所以,就選定了Ruby,從零開始學習。

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

迭代器簡介

先簡單介紹一下迭代器。

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

2.迭代器方法和塊之間有如下傳遞關系:塊被當成一個特殊參數傳給迭代器方法,而迭代器方法內部在使用yield調用代碼塊時可將參數值傳入塊;

3.實際上,迭代器的功能就是一種回調!迭代器方法所屬的類只負責遍歷需要遍歷的元素,而對元素所做的處理則通過回調代碼塊來實現;

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

迭代器詳解

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

字符串迭代器

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

復制代碼 代碼如下:

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

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

each_byte 是字串中用于處理每個字節的迭代器。每個字節都會代入塊參數 c 中。

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

復制代碼 代碼如下:

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

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

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

數字迭代器

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

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

復制代碼 代碼如下:

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/

第二個場景:求1到5的數字之和。這個也特別簡單:

復制代碼 代碼如下:

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

如果使用upto函數,還可以這樣寫:

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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

感覺有點扯遠了。下面,我們講講數組相關的迭代器。

數組迭代器

見識過了數字相關的迭代器,我們再看看數組相關的迭代器。

第一個場景:便利數組并輸出每個元素。直接上代碼:

復制代碼 代碼如下:

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!

  有時,我們需要對數組的元素做出一個挑選,這時可以這樣干:

復制代碼 代碼如下:

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

 有時,我們需要刪除數組中的某些值。這時:

復制代碼 代碼如下:

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

再來一個例子:

復制代碼 代碼如下:

# 找出最長字串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轉化成List類型的容器才行。但是,在Ruby中,有直接針對Map的迭代器,很好很方便:

復制代碼 代碼如下:

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

甚至,我們還可以這樣:

復制代碼 代碼如下:

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

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

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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

文件迭代器

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

復制代碼 代碼如下:

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

其實,我們可以使用代碼塊來進行同樣的操作:

復制代碼 代碼如下:

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

使用代碼塊,不需要手動close。這個推薦!

目錄迭代器

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

復制代碼 代碼如下:

Dir.foreach("c://") do |file|  # 請根據自己的系統類型,做適當的修改
 puts file
end

#輸出太多,就不貼結果了。可以自己運行一下看看

結尾

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

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

標簽:克拉瑪依 內江 大慶 西雙版納 棗莊 河池 南昌 甘孜

巨人網絡通訊聲明:本文標題《Ruby中的迭代器詳解》,本文關鍵詞  Ruby,中的,迭代,器,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby中的迭代器詳解》相關的同類信息!
  • 本頁收集關于Ruby中的迭代器詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    中文字幕网站在线观看| 国产日产欧美精品一区二区三区| 亚洲精选视频免费看| 国产 欧美在线| 亚洲女同二女同志奶水| 久久久亚洲精品石原莉奈 | 欧美激情一二三区| 精品一二线国产| 99精品欧美一区二区| 精品1区2区在线观看| 久久国产夜色精品鲁鲁99| 国产全是老熟女太爽了| 精品电影一区二区| 久草精品在线观看| 特级西西人体高清大胆| 日本一区二区三区四区在线视频| 国产成人精品午夜视频免费| 夫妻性生活毛片| 中文字幕中文字幕一区二区| 不卡的电影网站| 在线观看网站黄不卡| 91美女片黄在线| 国产精品一卡二卡| 不卡的电视剧免费网站有什么| 国产一级二级av| 国产女人18毛片水真多18| 在哪里可以看毛片| 在线观看成人免费视频| 亚洲一区二区在线免费看| 国内偷窥港台综合视频在线播放| 国内精品久久久久影院薰衣草| 精品亚洲aⅴ无码一区二区三区| 久久久久久影视| 高清不卡一二三区| 在线亚洲免费视频| 亚洲高清免费观看高清完整版在线观看| 波多野结衣有码| 精品国产乱码久久| 国产成人aaaa| 欧美午夜精品理论片a级按摩| 婷婷夜色潮精品综合在线| xxx在线播放| 国产精品久久久久久久岛一牛影视 | 日韩一区二区在线观看| 久久不见久久见免费视频7| 少妇高潮一区二区三区喷水| 亚洲乱码中文字幕综合| 欧美在线一级片| 久久精品人人做人人综合| 风间由美性色一区二区三区| 欧美午夜精品一区二区蜜桃 | 久久精品成人av| 国产精品女人毛片| 97久久精品人人做人人爽| 欧美日韩国产综合一区二区三区 | 欧美男男青年gay1069videost | 亚洲国产高清在线| 精品国产aⅴ一区二区三区东京热| 日韩精品一区二区三区在线播放| 丰满白嫩尤物一区二区| 欧美日本精品一区二区三区| 黄色日韩网站视频| 欧美亚洲另类激情小说| 激情欧美一区二区| 欧美影院一区二区| 国产在线视视频有精品| 欧美视频日韩视频在线观看| 精品一区二区国语对白| av一本久道久久综合久久鬼色| 欧美日韩国产123区| 国产伦理精品不卡| 欧美伦理视频网站| 国产精品18久久久久久久久 | 粉嫩在线一区二区三区视频| 91精品婷婷国产综合久久竹菊| 国产精品一区二区在线看| 欧美精品一卡二卡| 国产成人av电影在线观看| 日韩欧美一级二级| aaaaa黄色片| 国产日韩欧美一区二区三区综合| 亚洲视频在线播放免费| 亚洲欧美自拍偷拍| 国产综合精品久久久久成人av| 午夜视频在线观看一区二区| 欧美一区二区三区爽爽爽| 日本成人在线电影网| 在线视频你懂得一区| 国产精品99精品久久免费| 日韩一区二区视频| 久久久国产精品久久久| 亚洲国产激情av| www色com| 日本欧美一区二区在线观看| 在线免费观看日本一区| 高清不卡在线观看av| 337p日本欧洲亚洲大胆精品| 日韩Av无码精品| 亚洲乱码精品一二三四区日韩在线| jizzjizzjizz国产| 日本不卡一区二区三区高清视频| 在线观看国产91| 高清国产一区二区| 国产日韩欧美精品在线| 小早川怜子久久精品中文字幕| 午夜精品久久久久久久99樱桃 | 亚洲一区二区三区四区的 | 综合欧美亚洲日本| 殴美一级黄色片| 久久aⅴ国产欧美74aaa| 欧美一级片在线看| 人妻av一区二区| 亚洲成人精品影院| 欧美人与禽zozo性伦| 伊人av在线播放| 亚洲精品国产一区二区精华液| www.5588.com毛片| 国产99久久久久| 中文字幕精品三区| 成人欧美一区二区三区黑人一| 九九视频精品免费| 精品国产乱码久久久久久夜甘婷婷| 亚洲天堂成人av| 婷婷国产v国产偷v亚洲高清| 欧美久久久久久蜜桃| 国产情侣久久久久aⅴ免费| 亚洲一区二区av电影| 欧美日韩一级视频| 国产国语老龄妇女a片| 亚洲成a人片在线不卡一二三区 | 天天射综合影视| 色综合久久中文综合久久牛| 福利一区在线观看| 国产精品国产三级国产普通话三级| 黄色精品视频在线观看| 国产精品一区二区不卡| 国产精品毛片高清在线完整版| 艳妇荡乳欲伦69影片| 99这里只有精品| 亚洲欧美日韩成人高清在线一区| 色妹子一区二区| 欧美高清精品一区二区| 亚洲线精品一区二区三区八戒| 欧美乱熟臀69xxxxxx| 少妇户外露出[11p]| 美腿丝袜一区二区三区| 久久精品一区四区| 精品国产视频在线观看| 不卡影院免费观看| 一区二区三区**美女毛片| 欧美日韩激情一区二区| 亚洲精品视频大全| 国产乱对白刺激视频不卡| 国产精品美女久久福利网站| 色天使色偷偷av一区二区| 国产男女无遮挡猛进猛出| 日韩国产在线观看一区| 久久久亚洲精品一区二区三区| 国产盗摄一区二区三区在线| 91视频免费入口| 日本 国产 欧美色综合| 久久久国产精品麻豆| 五月婷婷一区二区三区| 无码人妻精品一区二区三| 久久国产三级精品| 国产精品伦一区二区三级视频| 欧美三级在线视频| 国产精品高清无码在线观看| 丁香五精品蜜臀久久久久99网站 | 在线中文字日产幕| 亚洲18影院在线观看| 精品播放一区二区| 亚洲精品卡一卡二| 久草免费资源站| 九九视频精品免费| 亚洲欧美成人一区二区三区| 欧美一级艳片视频免费观看| 99久久久免费精品| 国产69视频在线观看| 国内一区二区在线| 亚洲黄色录像片| 亚洲精品在线网站| 在线观看免费一区| 在线不卡av电影| eeuss鲁片一区二区三区在线看| 五月天亚洲婷婷| 欧美国产一区在线| 欧美丰满少妇xxxxx高潮对白| 老司机福利在线观看| 国产成人av片| 国产一区二区三区四区五区入口| 樱花影视一区二区| 久久久久久久精| 欧美日韩国产一区二区三区地区| 337人体粉嫩噜噜噜| 久久精品aⅴ无码中文字字幕重口| 韩国精品在线观看| 亚洲国产色一区| 国产精品你懂的在线| 欧美videos大乳护士334|