陣列在ruby中是一個基礎的資料結構,在ruby中,我們可以把不同型別的資料放在同一個陣列裡面
為什麼要用陣列?
可以將字串、數字… 等其他值集中放在一起,一次傳給設定的方法去執行
list = [1, 2, 3, 4, 5, "aa"]
arr = Array.new
# []
Array.new(3, 100)
# [100, 100, 100]
heroes = ['孫悟空', '魯夫', '宇智波佐助', '⼀拳超人', '流川楓', '⿊崎一護', '劍⼼'];
puts heroes[0] # 印出 孫悟空
puts heroes[1] # 印出 魯夫
puts heroes[-1] # 印出 劍⼼
puts heroes[-2] # 印出 ⿊崎一護
puts heroes.first # 印出 孫悟空
puts heroes.last # 印出 劍心
puts heroes.length # 印出 7
heroes << "yen"
:將"yen"加入陣列heroes的最末端heroes.push("RoR")
:將"RoR"加入陣列heroes的最末端heroes << '漩渦鳴⼈' # 在最後⾯加⼀個⼈
puts heroes.length # 印出 8
heroes.push('布羅利')
puts heroes.length # 印出 9
list.map { |i| i * 2 }
或 list.each do |num| p num * 2 end
的 Block 中,那個 |i|
和 |num|
是什麼?Block 中包住 i 和 num 的 |
唸做 pipe,中間的 i 與 num 是匿名函數的參數,稱作 token,其實是 Block 範圍裡的區域變數,離開 Block 之後就會失效了。list = [1, 2, 3, 4, 5]
p list.map {|x| x*2}
# 變數 x 只有在 Block 裡有效,會產生 [2, 4, 6, 8, 10]
p (1..10).select { |x| x < 5 }
# 印出 [1, 2, 3, 4]
p (1..10).reduce { |sum, n| sum + n }
# 印出 55
p (1..10).sum
#55
list = [1, 3, 4, 1, 7, nil, 7]
p list.compact
arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]
list = [3, 1, 7, 4]
p list.sort [1, 3, 4, 7]
list = [1, 3, 4, 1, 7, nil, 7] #要去除重複, nil, 且由小到大
p list.compact.uniq.sort
使用小數點表示
..
:1..10
表示從 1 開始且++有包括10。
...
:1...10
表示從 1 開始++但不包括10。
to_a
: 轉成陣列
p (1..5).to_a # 印出 1 到 10 並轉成陣列
# [1, 2, 3, 4, 5]
p (11...15).to_a
# [11, 12, 13, 14]
練習:
#1
p(1..100).select{|x| x%2==1}
p(1..100).select{|x| x.odd?}
#2
p(1..100).reduce {|sum,x| sum+x}
p(1..100).sum
#3
p(1..100).to_a.shuffle.first(5)
p(1..100).to_a.sample(5)
#shuffle 洗牌
#first 返回最前面的element