Ruby中的數(shù)組和散列表的使用詳解
Ruby的數(shù)組(arrays)和散列表(hashes)是被索引的收集(indexed collections).
兩者都存儲(chǔ)對(duì)象的集合,通過鍵(key)來訪問。數(shù)組的鍵是整數(shù)。而散列表支持以任何對(duì)象作為它的鍵。數(shù)組和散列表會(huì)按需調(diào)整大小來保存新的元素。訪問數(shù)組元素是高效的,但是散列表提供了靈活性。任何具體的數(shù)組或散列表可以保存不同類型的對(duì)象。
使用數(shù)組字面量(array literal)--即方括號(hào)之間放一組元素--可以創(chuàng)建和初始化新的數(shù)組對(duì)象。有了數(shù)組對(duì)象,在方括號(hào)之間提供索引便可以訪問單個(gè)元素,如下例所示,注意Ruby數(shù)組的索引從零開始。
a=[1,'cat',3.14] #有三個(gè)元素的數(shù)組 #訪問第一個(gè)元素 a[0] -> 1 #設(shè)置第三個(gè)元素 a[2] = nil #顯示這個(gè)數(shù)組 a ->[1,'cat',nil]
你可能已注意到在這個(gè)例子中使用了nil這個(gè)特別的值。許多語言中nil(或null)的概念是指“沒有對(duì)象”。在Ruby中,這是不一樣的;nil是一個(gè)對(duì)象,與別的對(duì)象一樣,只不過它用來表示沒有任何東西的對(duì)象。
有時(shí)候創(chuàng)建一組單詞的數(shù)組是一件痛苦的事情--要處理許多引號(hào)和逗號(hào)。幸運(yùn)的是,Ruby有一種快捷方式:%w 能夠完成我們想做的事情。
a = ['ant','bee','cat','dog','elk'] a[0] -> "ant" a[3] -> "dog" #this is the same: a = %w{ant bee cat dog elk} a[0] -> "ant" a[3] -> "dog"
Ruby的散列表與數(shù)組相似。散列表字面量(hash literal)使用花括號(hào)而不是方括號(hào)。這個(gè)字面量必須為每一項(xiàng)提供兩個(gè)對(duì)象:一個(gè)鍵(key)和一個(gè)值(value)。
例如,你可能想將樂器映射到它們所屬的交響樂章節(jié),可以用散列表這么來做:
inst_section = { 'cello' => 'string', 'clarinet' => 'woodwind', 'drum' => 'percussion', 'oboe' => 'woodwind', 'trumpet' => 'brass', 'violin' => 'string' }
=>的左邊是鍵(key),右邊是其對(duì)應(yīng)的值(value)。在一個(gè)散列表里面,鍵必須是唯一的(不能有兩個(gè)“drum”項(xiàng))。散列表里面的鍵和值可以是任意對(duì)象--你可能會(huì)有這樣的散列表,它的值是數(shù)組或別的散列表等。
散列表使用與數(shù)組相同的方括號(hào)表示法來進(jìn)行索引。
inst_section['oboe'] -> "woodwind" inst_section['cello'] -> "string" inst_section['bassoon'] -> nil
正如上例所示,默認(rèn)情況下,如果用一個(gè)散列表沒有包含的鍵進(jìn)行索引,散列表就返回nil。通常這樣是很方便的,比如在條件表達(dá)式中nil就意味著false。而有時(shí)候你可能想改變這個(gè)默認(rèn)動(dòng)作。比如使用散列表來計(jì)算每個(gè)鍵出現(xiàn)的次數(shù)時(shí),如果這個(gè)默認(rèn)值是0的話就會(huì)很方便。這很容易做到:當(dāng)創(chuàng)建一個(gè)新的空散列表時(shí),可以指定一個(gè)默認(rèn)值。
histogram = Hash.new(0) histogram['key1'] ->0 histogram['key1'] = histogram['key1']+1 histogram['key1'] ->1
相關(guān)文章
Ruby微信開發(fā)的幾個(gè)開源項(xiàng)目介紹
這篇文章主要介紹了Ruby微信開發(fā)的幾個(gè)開源項(xiàng)目介紹,需要的朋友可以參考下2014-05-05windows下安裝ruby與rails時(shí)遇到的問題總結(jié)
這篇文章主要總結(jié)了windows下安裝ruby與rails時(shí)遇到的問題,本文總結(jié)的問題都是通過自己實(shí)踐所得來的,總結(jié)的還算是相對(duì)比較全面,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04Ruby中g(shù)em包管理器的用法及用bundler來管理多版本的gem
gem是Ruby環(huán)境中的包管理器,好比于Python中的pip與JavaScript本地Node.js的npm,非常有名和強(qiáng)大,下面就來看一下Ruby中g(shù)em包管理器的用法及用bundler來管理多版本的gem的方法:2016-05-05升級(jí)到mac 10.10之后使用pod出現(xiàn)問題的解決方法
這篇文章主要介紹了升級(jí)到mac 10.10之后使用pod出現(xiàn)問題的解決方法,需要的朋友可以參考下2014-07-07借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法
這篇文章主要介紹了借助RubyGnome2庫進(jìn)行GTK下的Ruby GUI編程的基本方法,介紹了基本的UI和事件響應(yīng)的相關(guān)實(shí)現(xiàn),需要的朋友可以參考下2015-12-12