婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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中的迭代器詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧美日韩人成在线播放| 欧美激情在线观看视频免费| 亚洲一级二级三级在线免费观看| 日韩精品每日更新| 国产亚洲精品福利| 狠狠网亚洲精品| 亚洲另类在线一区| 亚洲男人的天堂一区二区| 中文字幕中文字幕在线一区 | 欧美日韩国产免费| 国产亚洲综合av| 色婷婷av一区二区三区之一色屋| 92精品国产成人观看免费| 91久久精品日日躁夜夜躁欧美| 精品福利一二区| 久久精品一二三| 99精品在线观看视频| 国产欧美精品区一区二区三区 | 亚洲影院免费观看| 91麻豆精品国产91久久久使用方法 | 日本一区二区成人| 国产一区二区免费视频| 性久久久久久久| 精品无人码麻豆乱码1区2区 | 亚洲在线视频网站| 三级影片在线观看欧美日韩一区二区| 777亚洲妇女| 九色|91porny| 欧美精三区欧美精三区| 91亚洲国产成人精品一区二三| 久久99国产精品尤物| 国产精品白丝在线| 国产无一区二区| 欧美大黄免费观看| 欧美国产日韩亚洲一区| 26uuu久久综合| 亚洲精品一区二区三区影院| 久久亚洲精华国产精华液| 26uuu精品一区二区三区四区在线| 欧美亚洲综合在线| 日韩精品一区在线观看| 欧美成人精品福利| 日韩午夜av电影| 欧美一二三四在线| 国产日韩欧美制服另类| a级精品国产片在线观看| 欧美精品久久99久久在免费线| 国产无遮挡一区二区三区毛片日本 | 国产精品麻豆欧美日韩ww| 久久久精品tv| 欧美激情一区二区三区四区 | 欧美专区日韩专区| 欧美性猛交一区二区三区精品| 91偷拍与自偷拍精品| 国产一区二区0| 成人av先锋影音| 99精品热视频| 欧美日韩亚洲综合在线 | 久久视频一区二区| 国产亚洲精品7777| 欧美国产一区在线| 一区二区成人在线视频| 亚洲电影一级片| 男男成人高潮片免费网站| 亚洲成av人片在线观看无码| 欧美亚洲一区二区三区四区| 91国产视频在线观看| 成人sese在线| 国产精品综合一区二区| 黄色资源网久久资源365| 国产综合久久久久久鬼色| 极品少妇xxxx精品少妇偷拍 | 大尺度一区二区| 94色蜜桃网一区二区三区| 欧美三级欧美一级| 欧美经典一区二区| 欧美经典一区二区三区| 国产午夜三级一区二区三| 亚洲精品免费一二三区| 7777精品伊人久久久大香线蕉完整版| 美日韩一区二区| 国产精品久久久久久福利一牛影视 | 欧洲av一区二区嗯嗯嗯啊| 日韩av一区二| 国产欧美日韩精品在线| 欧美在线一区二区| 久久国产夜色精品鲁鲁99| 国产精品乱码一区二区三区软件| 欧美最猛黑人xxxxx猛交| 久久99国产精品久久| 亚洲色图一区二区三区| 欧美一级二级三级乱码| 亚洲国产精品99久久久久久久久| 一区二区免费看| 欧美亚洲一区三区| 香蕉av福利精品导航| 欧美电影一区二区| 日本在线不卡一区| 精品成人一区二区三区四区| 精品中文av资源站在线观看| 欧美精品一区二区三区很污很色的| 蜜桃视频在线观看一区| 欧美电影精品一区二区| 国内精品伊人久久久久av影院| 日韩免费一区二区| 国产精品亚洲成人| 国产精品伦理一区二区| 91免费观看国产| 亚洲图片自拍偷拍| 欧美日韩色一区| 老司机精品视频在线| 久久久综合精品| 99精品视频在线播放观看| 亚洲午夜精品在线| 制服丝袜日韩国产| 国内精品视频666| 国产精品国产三级国产aⅴ中文| 成人免费视频免费观看| 中文字幕精品一区二区精品绿巨人| 国产在线一区观看| 亚洲精品国产视频| 欧美日韩不卡一区二区| 国产精品白丝jk黑袜喷水| 国产一区二区在线观看免费 | 麻豆精品国产传媒mv男同| 精品国免费一区二区三区| 国产麻豆精品95视频| 亚洲欧美视频一区| 欧美日韩一区高清| 国产专区综合网| 国产精品久久毛片| 欧美理论片在线| 成人性视频网站| 日韩和的一区二区| 国产精品动漫网站| 日韩欧美在线123| 在线精品视频一区二区三四| 国产一区二区三区蝌蚪| 亚洲国产乱码最新视频| 日本一区二区三区四区| 欧美日韩国产一区二区三区地区| 狠狠网亚洲精品| 亚洲超丰满肉感bbw| 国产精品国产三级国产普通话99 | 日本中文字幕一区| 国产精品色一区二区三区| 欧美精品亚洲二区| 99久久久精品| 亚洲二区在线观看| 中文av一区特黄| 亚洲视频一区二区在线| 亚洲一区视频在线观看视频| 亚洲图片欧美色图| 七七婷婷婷婷精品国产| 久久丁香综合五月国产三级网站| 卡一卡二国产精品 | 国产经典欧美精品| 成人做爰69片免费看网站| 成人中文字幕合集| 在线免费观看不卡av| 337p亚洲精品色噜噜| 国产喂奶挤奶一区二区三区| 国产三级精品在线| 亚洲日本欧美天堂| 天堂一区二区在线免费观看| 久久国产精品99久久久久久老狼| 国产一区视频导航| 日本韩国一区二区三区视频| 欧美日韩中文国产| 久久久91精品国产一区二区精品| 亚洲人成在线观看一区二区| 日韩精品1区2区3区| 国产乱子伦视频一区二区三区 | 亚洲精品免费在线| 久久精品国产亚洲高清剧情介绍| 国产91在线观看丝袜| 欧美体内she精高潮| 日韩欧美的一区| 亚洲四区在线观看| 蜜臀国产一区二区三区在线播放| 丁香激情综合五月| 在线电影一区二区三区| 国产欧美一区二区精品秋霞影院| 一区二区三区在线看| 国产真实精品久久二三区| 欧美无砖专区一中文字| 国产一级精品在线| 国产精品羞羞答答xxdd| 日韩不卡在线观看日韩不卡视频| 免费精品视频在线| 国产成人自拍在线| 在线免费精品视频| 宅男在线国产精品| 国产日韩成人精品| 亚洲制服丝袜av| 裸体一区二区三区| 波多野结衣中文一区| 欧美老年两性高潮| 国产日韩精品一区二区浪潮av| 亚洲视频一区二区免费在线观看|