Array

Introduction

  • 超類: Object
  • 包含模塊: Enumerable

New

基礎(chǔ)

ary = [1, "two", 3.0] #=> [1, "two", 3.0]
ary = Array.new    #=> []
Array.new(3)       #=> [nil, nil, nil]  默認(rèn)為 nil
Array.new(3, true) #=> [true, true, true]

提高

  • new可以跟 block
    Array.new(4) { Hash.new } #=> [{}, {}, {}, {}]
    empty_table = Array.new(3) { Array.new(3) } #=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
    
  • Hash 轉(zhuǎn)化為 Array
    Array({:a => "a", :b => "b"}) #=> [[:a, "a"], [:b, "b"]]
    {:a => "a", :b => "b"}.to_a  #=> [[:a, "a"], [:b, "b"]]
    

注意點(diǎn)

  1. new 的第二個(gè)參數(shù)谎懦,array 將填充同一個(gè) object,==這里有陷阱==

    a = Array.new(2, Hash.new)
    # => [{}, {}]
    
    a[0]['cat'] = 'feline'
    a # => [{"cat"=>"feline"}, {"cat"=>"feline"}]
    
    a[1]['cat'] = 'Felix'
    a # => [{"cat"=>"Felix"}, {"cat"=>"Felix"}]
    
    # 修改第一個(gè) hash棘钞,第二個(gè)也跟著變入愧,因?yàn)槭峭粋€(gè) object
    
  2. new 中的 block抽米, array 將填充不同的 object

    a = Array.new(2) { Hash.new }
    a[0]['cat'] = 'feline'
    a # => [{"cat"=>"feline"}, {}]
    

Index

基礎(chǔ)

  • slice
    arr = [1, 2, 3, 4, 5, 6]
    arr[2]    #=> 3
    arr[100]  #=> nil
    arr[-3]   #=> 4
    
  • first两波,last
    arr.first #=> 1
    arr.last  #=> 6
    

提高

  • slice
    arr[2, 3] #=> [3, 4, 5]
    arr[1..4] #=> [2, 3, 4, 5]
    arr[1..-3] #=> [2, 3, 4]
    
  • at此蜈,take堰氓,drop
    arr.at(0) #=> 1
    arr.take(3) #=> [1, 2, 3]  提取前3個(gè)元素
    arr.drop(3) #=> [4, 5, 6]  排除前3個(gè)元素
    
  • fetch适荣,如果指定的 index 有元素就返回现柠,否則返回指定的信息
    a = [ 11, 22, 33, 44 ]
    a.fetch(1)               #=> 22
    a.fetch(-1)              #=> 44
    a.fetch(4, 'cat')        #=> "cat"  沒有元素,返回指定的信息 cat
    a.fetch(100) { |i| puts "#{i} is out of bounds" }  #=> "100 is out of bounds"
    

注意點(diǎn)

  1. slice 索引超出范圍時(shí)需要特別注意弛矛,==這里有陷阱==
    a = [ "a", "b", "c", "d", "e" ]
    a[5]                   #=> nil
    a[6, 1]                #=> nil
    a[5, 1]                #=> []
    a[5..10]               #=> []
    

Information

基礎(chǔ)

browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']
browsers.length #=> 5
browsers.count #=> 5
browsers.size #=> 5

提高

browsers.empty? #=> false
browsers.include?('Konqueror') #=> false

注意點(diǎn)

  • count可以跟參數(shù)或者 block
    ary = [1, 2, 4, 2]
    ary.count                  #=> 4
    ary.count(2)               #=> 2
    ary.count { |x| x%2 == 0 } #=> 3
    

Add Items

基礎(chǔ)

arr = [1, 2, 3, 4]
arr.push(5) #=> [1, 2, 3, 4, 5]
arr << 6    #=> [1, 2, 3, 4, 5, 6]

提高

arr.unshift(0) #=> [0, 1, 2, 3, 4, 5, 6]
arr.insert(3, 'apple')  #=> [0, 1, 2, 'apple', 3, 4, 5, 6]
arr.insert(3, 'orange', 'pear', 'grapefruit')  #=> [0, 1, 2, "orange", "pear", "grapefruit", "apple", 3, 4, 5, 6]

注意點(diǎn)

  1. push够吩、unshiftinsert 一次可以加入多個(gè)元素
    a = [ "b", "c", "d" ]
    a.unshift("a")   #=> ["a", "b", "c", "d"]
    a.unshift(1, 2)  #=> [ 1, 2, "a", "b", "c", "d"]
    

Remove Items

基礎(chǔ)

  • pop
    arr =  [1, 2, 3, 4, 5, 6]
    arr.pop #=> 6
    arr #=> [1, 2, 3, 4, 5]
    
  • shift
arr.shift #=> 1
arr #=> [2, 3, 4, 5]
arr.delete_at(2) #=> 4
arr #=> [2, 3, 5]

提高

  • delete
    arr = [1, 2, 2, 3]
    arr.delete(2) #=> 2
    arr #=> [1,3]
    
    # 有多個(gè)2,全部被刪掉了
    
  • compact丈氓,刪除 nil 項(xiàng)
    arr = ['foo', 0, nil, 'bar', 7, 'baz', nil]
    arr.compact  #=> ['foo', 0, 'bar', 7, 'baz']
    arr          #=> ['foo', 0, nil, 'bar', 7, 'baz', nil]
    
    # arr 的值并沒有變化
    
  • uniq废恋,合并重復(fù)項(xiàng)
    arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
    arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]
    

注意點(diǎn)

  1. delete會(huì)將array中所有等于該數(shù)值的項(xiàng)都刪掉
  2. compact!uniq!可以改變?cè)瓉?array 的值谈秫,==但是返回值有陷阱==
    [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
    [ "a", "b", "c" ].compact!           #=> nil  沒有 nil 項(xiàng)會(huì)返回 nil
    
    a = [ "a", "a", "b", "b", "c" ]
    a.uniq!   # => ["a", "b", "c"]
    
    b = [ "a", "b", "c" ]
    b.uniq!   # => nil  沒有重復(fù)項(xiàng)會(huì)返回 nil
    
  3. uniq!可以跟 block
    c = [["student","sam"], ["student","george"], ["teacher","matz"]]
    c.uniq! { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
    
  4. slice!也可以用來刪除元素
    a = [ "a", "b", "c" ]
    a.slice!(1)     #=> "b"
    a               #=> ["a", "c"]
    a.slice!(-1)    #=> "c"
    a               #=> ["a"]
    a.slice!(100)   #=> nil
    a               #=> ["a"]
    

Iterate Over 遍歷

基礎(chǔ)

  • each
    arr = [1, 2, 3, 4, 5]
    arr.each { |a| print a -= 10, " " }
    # prints: -9 -8 -7 -6 -5
    #=> [1, 2, 3, 4, 5]  原有 array 的值不變
    
  • reverse_each,倒序遍歷
    words = %w[first second third fourth fifth sixth]
    str = ""
    words.reverse_each { |word| str += "#{word} " }
    p str #=> "sixth fifth fourth third second first "
    

提高

  • map

    arr.map { |a| 2*a }   #=> [2, 4, 6, 8, 10]
    arr                   #=> [1, 2, 3, 4, 5]
    
  • map!

    arr.map! { |a| a**2 } #=> [1, 4, 9, 16, 25]
    arr                   #=> [1, 4, 9, 16, 25]
    

Select Items

基礎(chǔ)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鱼鼓,一起剝皮案震驚了整個(gè)濱河市拟烫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迄本,老刑警劉巖硕淑,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嘉赎,居然都是意外死亡置媳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門公条,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇囊,“玉大人,你說我怎么就攤上這事靶橱×认” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵关霸,是天一觀的道長(zhǎng)传黄。 經(jīng)常有香客問我,道長(zhǎng)队寇,這世上最難降的妖魔是什么膘掰? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮佳遣,結(jié)果婚禮上识埋,老公的妹妹穿的比我還像新娘。我一直安慰自己零渐,他們只是感情好惭聂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著相恃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笨觅。 梳的紋絲不亂的頭發(fā)上拦耐,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音见剩,去河邊找鬼杀糯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苍苞,可吹牛的內(nèi)容都是我干的固翰。 我是一名探鬼主播狼纬,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼骂际!你這毒婦竟也來了疗琉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤歉铝,失蹤者是張志新(化名)和其女友劉穎盈简,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體太示,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柠贤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了类缤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臼勉。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖餐弱,靈堂內(nèi)的尸體忽然破棺而出宴霸,到底是詐尸還是另有隱情,我是刑警寧澤岸裙,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布猖败,位于F島的核電站,受9級(jí)特大地震影響降允,放射性物質(zhì)發(fā)生泄漏恩闻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一剧董、第九天 我趴在偏房一處隱蔽的房頂上張望幢尚。 院中可真熱鬧,春花似錦翅楼、人聲如沸尉剩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理茎。三九已至,卻和暖如春管嬉,著一層夾襖步出監(jiān)牢的瞬間皂林,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工蚯撩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留础倍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓胎挎,卻偏偏與公主長(zhǎng)得像沟启,于是被迫代替她去往敵國(guó)和親忆家。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容