Ruby 學習筆記-陣列&範圍(Array&Range)

為什麼需要有陣列資料型態?

因為一次只傳一個字串或數字太沒有效率,弄個集合包裝把所有資料放到裡面在一次傳過去。

建立陣列

    #使用Array類別
    a = Array.new
    #使用中括號
    b = []
    #一樣可以建立陣列,但要小心裡面的東西會變成字串
    list = %w(ruby php python)

使用陣列

  • 陣列索引值都是從 0 開始計算,從後面就是由-1 開始。
    list = ["ruby","php","python","c","java","JavaScript"]
    puts list[0]  #印出  ruby
    puts list[1]  #印出  php
    puts list[-1] #印出  JavaScript
    puts list[-2] #印出  java

    #ruby方法
    puts list.first  #印出  ruby
    puts list.last   #印出  JavaScript
    puts list.length #印出 6 ,代表陣列裡有6個元素

    list << "React"     #在最後面加一個元素
    puts list.length    #印出 7
    list.push("vue.js") #也可以用此種方式在陣列後方加元素
    puts list.length    #印出8
  • map:對集合裡的每個元素進行運算,並收集成一個新的集合

    同意詞:collect

    list = [1, 2, 3, 4, 5]
    p list.map { | x | x × 2 }
    #會把裡面每個元素丟進x裡,再乘於2得到新的集合[2, 4 , 6, 8, 10 ]
    p list.collect { | x | x × 2 }
    #得出的結果與上面一樣
    p(1..10).map { | x | x × 2 }
    #(1..10)數字1到10依順序丟進x裡,得出[2, 4, 6 , 8, 10, 12, 14, 16, 18, 20]
  • select:從集合裡挑選符合條件的元素,並收集成一個新的集合

    同意詞:filter

    反意詞:reject

    p (1..10).select { | x | x < 5}
    #從數字1到10裡挑選出符合小於 5 的數字,得出[1, 2, 3, 4]
    p (1..10).reject { | x | x < 5}
    #從數字1到10裡挑選出不符合小於 5 的數字,得出[5, 6, 7, 8, 9, 10]
  • reduce:對集合裡的每個元素進行運算,並將所有的運算結果歸納成一個單一結果

同義詞:inject

   p (1..10).reduce { |sum, x| sum + x}
   #1到10的數字會依序丟進 x 裡,再由 sum 負責依序將所有 x 值累加起來,得到 55

範圍

    puts (1..10).to_a   #印出 1~10 ,to_a轉成陣列
    puts (1...10).to_a  #印出 1~9
  • 不只可以用在數字上,也可以用在文字上("a".."z")

  • 與 for 迴圈結合

    for i in 1..10
        puts i
    end
  • 與 case..when..結合
    age = 10

    case age
    when 0..3
      puts "嬰兒"
    when 4..10
      puts "兒童"
    when 11..17
      puts "青少年"
    else
      puts "成年"
    end
comments powered by Disqus