iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

自我挑戰Ruby系列 第 17

Day 17 - 陣列2

  • 分享至 

  • xImage
  •  

增加元素

我們可以藉由兩種方法增加元素:

(1) << :我們可以藉由 Array << 元素,增加某個元素進去陣列中,例如:

names = ["Allen", "Andy", "Arance"]

names << "Abby"

這樣names的陣列裡面就會變成["Allen", "Andy", "Arance", "Abby"]

(2) .push:可以藉由 Array.push(元素),將元素增加,例如:

names = ["Allen", "Andy", "Arance", "Abby"]

names.push("Alan")

這樣names的陣列會變成["Allen", "Andy", "Arance", "Abby", "Alan"]

新陣列

當我們想要用原來的陣列中每個元素使用同一個處理方式而建立新的陣列,

或許我們會藉由新建一個空的陣列,然後使用迴圈將每個元素加入空陣列內。

但其實在Ruby內有更好的方法來處理。

map方法

藉由對陣列中每個元素處理相同的事之後,在新的陣列中被收集起來。

例如:

arr = [1, 2, 3, 4]

p arr.map{|x| x+5}

這樣做,印出來的就會是 [6, 7, 8, 9]

而map方法其實跟collect方法做法相同,所以可以用相同方式把map改成collect。

select方法

藉由在陣列中挑選出符合條件的元素,在新的陣列中被收集起來。

例如:

arr = [1, 2, 3, 4]

p arr.select{|x| x<3}

以這種方式,印出來的就會是挑選出x<3的元素,則會是[1, 2]

而select方法跟filter方法是相同的,所以select可以改成filter。

select方法跟reject方法是相反的,所以這個例子使用reject方法要把條件改掉。

例如:

arr = [1, 2, 3, 4]

p arr.reject {|x| x>2}

因為用p arr.reject {|x| x<3}則會是印出[3, 4]。

歸納

會將最終的結果統一出來。我們會藉由reduce方法。

reduce方法

對每個元素做計算,而最後會得到一個單一的結果。

例如藉由歸納方法想要1加到100,我們可以寫成:

p (1..100).reduce {|sum, x| sum + x}

則結果會得到5050。

其中(1..100)是列出1, 2, 3, … , 100的範圍。每當x出現,就會做累加。

然後reduce方法跟inject方法是相同的,所以reduce的部分可以改成inject。

Day 17 結語

陣列可以使用的方法很多,也有一些跟字串的方法也雷同。

元素可以藉由迴圈組成新的陣列,也可以藉由Ruby內各種方法對陣列做事,

而收集成新的陣列,也有很多類似的方法可以使用,

不單單僅只有一個方法產生唯一的結果,一樣有很多路可以達到最後的終點。


上一篇
Day 16 - 陣列1
下一篇
Day 18 - 範圍
系列文
自我挑戰Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言