校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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中的迭代器詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美理论在线播放| 国产suv精品一区二区6| 欧美亚洲一区三区| 亚洲成年人影院| 日韩精品在线一区| 99国产欧美另类久久久精品| 水蜜桃久久夜色精品一区的特点 | 欧美高清在线一区| 91在线小视频| 色中色一区二区| 精品午夜一区二区三区在线观看| 中文字幕亚洲一区二区av在线 | 91免费观看在线| 日韩精品视频网站| 婷婷六月综合网| 亚洲视频免费在线| 精品久久人人做人人爱| 欧洲精品在线观看| 成人一区二区三区| 国产一区二区按摩在线观看| 香蕉成人啪国产精品视频综合网| 亚洲精品视频免费看| 日韩欧美一区在线| 91热门视频在线观看| 色婷婷久久久久swag精品| 精品视频色一区| 色综合一区二区三区| 国产精品538一区二区在线| 奇米777欧美一区二区| 亚洲国产视频直播| 18欧美亚洲精品| 日韩影院免费视频| 成人三级伦理片| 欧美日韩综合色| 久久精品人人做人人综合 | 麻豆精品精品国产自在97香蕉| 亚洲激情在线播放| 麻豆精品国产91久久久久久| 成人综合在线观看| 欧美肥妇毛茸茸| 国产精品久久午夜夜伦鲁鲁| 欧美激情资源网| 亚洲国产另类精品专区| 国产成人h网站| 国产主播一区二区| 国产伦精品一区二区三区视频青涩 | 成人不卡免费av| 成人av资源在线| 在线综合视频播放| 日韩视频在线永久播放| 亚洲欧美视频一区| 亚洲桃色在线一区| 国产一区二区三区免费在线观看| 欧美视频一区二区三区| 国产亚洲精品aa| 老司机精品视频导航| 国产综合色视频| 欧美人与性动xxxx| 日韩亚洲国产中文字幕欧美| 国产精品久久久久久亚洲伦| 激情成人综合网| 91精品福利在线一区二区三区| 日韩欧美国产综合| 性做久久久久久免费观看| 色哟哟国产精品| 亚洲色图第一区| 不卡视频免费播放| 欧洲精品视频在线观看| 精品国产一区二区三区不卡| 久久久久97国产精华液好用吗| 不卡的av电影| 久久久三级国产网站| 丁香啪啪综合成人亚洲小说| 久久综合九色综合欧美98| 在线亚洲一区二区| 国产精品的网站| 国产一区二区三区在线看麻豆| 欧美一区午夜视频在线观看| 肉丝袜脚交视频一区二区| 欧美在线你懂得| 亚洲午夜精品网| 欧美日韩一区二区电影| 丝袜美腿一区二区三区| 欧美亚洲动漫制服丝袜| 亚洲成人av一区| 91福利精品视频| 舔着乳尖日韩一区| 6080亚洲精品一区二区| 亚洲狠狠爱一区二区三区| 欧美在线观看一二区| 亚洲电影激情视频网站| 欧美日韩激情在线| 精品亚洲国产成人av制服丝袜 | 国产老女人精品毛片久久| 久久精品免视看| 色综合激情五月| 婷婷久久综合九色国产成人 | 久久成人免费日本黄色| 久久综合网色—综合色88| 国产成人免费在线观看| 中文字幕一区二区三区在线观看| 91视视频在线观看入口直接观看www| 亚洲欧美日韩系列| 91麻豆精品久久久久蜜臀| 国产一区二区三区综合| 亚洲欧美国产77777| 欧美理论片在线| 国产成人高清在线| 亚洲一二三四在线观看| 国产盗摄精品一区二区三区在线| 精品国产伦一区二区三区观看方式| 精品在线播放免费| 曰韩精品一区二区| 久久亚洲精精品中文字幕早川悠里| heyzo一本久久综合| 久久久久久久久久久久久女国产乱| eeuss鲁片一区二区三区| 日韩精品久久理论片| 国产精品久久久久久久久免费相片| 欧美丝袜丝nylons| 国产成人在线视频网站| 丝袜诱惑亚洲看片| 国产欧美日本一区视频| 国产不卡视频在线播放| 天天操天天综合网| 中文av一区二区| 97精品国产97久久久久久久久久久久| 蜜臀av性久久久久av蜜臀妖精 | 午夜视频一区二区| 国产精品你懂的| 日韩欧美久久一区| 欧美无乱码久久久免费午夜一区| 国产精品一区二区不卡| 日韩av成人高清| 亚洲精品一区二区三区福利 | 99re热这里只有精品免费视频| 日韩av在线发布| 亚洲一二三区不卡| 国产精品色婷婷久久58| 精品国产乱码久久久久久牛牛| 欧美专区在线观看一区| 丁香婷婷深情五月亚洲| 久久se精品一区精品二区| 婷婷亚洲久悠悠色悠在线播放| 亚洲精品久久7777| 综合久久久久综合| 欧美激情一区二区三区四区| 精品福利一区二区三区免费视频| 欧美一级欧美三级在线观看| 欧美男生操女生| 欧美精品久久久久久久多人混战 | 欧美电影影音先锋| 色婷婷av一区二区三区之一色屋| 成人涩涩免费视频| 成人av电影在线网| av亚洲精华国产精华精华| www.日韩精品| 色悠悠久久综合| 91黄色小视频| 欧美日韩国产乱码电影| 欧美精品在欧美一区二区少妇| 欧美色图天堂网| 91精品在线观看入口| 日韩欧美国产一区在线观看| 日韩美女在线视频| 国产欧美视频在线观看| 国产喷白浆一区二区三区| 国产精品久久久久久亚洲毛片| 综合分类小说区另类春色亚洲小说欧美| 国产精品国产a| 亚洲自拍与偷拍| 蜜桃视频在线观看一区| 国内成人免费视频| 白白色亚洲国产精品| 欧美日韩午夜在线视频| 日韩视频在线永久播放| 久久久久久毛片| 成人欧美一区二区三区黑人麻豆 | 蜜桃视频在线观看一区| 国产久卡久卡久卡久卡视频精品| 波波电影院一区二区三区| 欧美视频三区在线播放| 久久综合久久99| 亚洲精品国产成人久久av盗摄| 日韩黄色免费电影| 国产91丝袜在线播放| 欧美影视一区二区三区| 亚洲精品一区二区三区在线观看| 中文字幕在线一区| 日韩极品在线观看| 成人99免费视频| 日韩欧美一二三区| 亚洲欧洲另类国产综合| 久久av老司机精品网站导航| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 1024成人网| 国产在线观看一区二区| 在线日韩国产精品| 久久久国产一区二区三区四区小说 | 亚洲欧美中日韩|