iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1

https://ithelp.ithome.com.tw/upload/images/20190922/20118842SLUvBWp8Cc.jpg

陣列(Array)

建立陣列方式:

arr = Array.new()        # []
arr = Array.new([repeat], [item])

# Array literal notation
arr = [ ]                # []

# 建立帶值陣列
arr = Array.new(3,"Hello")    # ["Hello","Hello","Hello"]
arr = [*1..52]                # [1, 2, 3, ..., 51, 52]
arr = ["ruby", "is", "good"]  # ["ruby","is","good"]
arr = %w(ruby is good)        # 如果陣列的元素都是字串,可以使用 %w ,回傳["ruby", "is", "good"]
arr = %W(#{food} is good)     # 大寫的 %W 

陣列取用

arr = ["cat", "dog", "bird"]
arr[0]            # 取陣列中第一個,["cat"]
arr[-1]           # 取陣列中最後一個,["bird"]
arr[0..2]         # 取陣列中第一個到第三個,["cat", "dog", "bird"]
arr.at(1)         # 根據索引值,["dog"]
arr.fetch(100, "fish")   # 根據索引值,如果無該元素,則以第二個參數為預設值,["fish"]
arr.first           # 提取第一個,["cat"]
arr.last            # 提取最後一個,["bird"]
arr.drop(2)         # 刪除前兩個陣列元素後再提取,["bird"]
arr.slice(1,2)      # 從第 i 個元素開始取 j 個元素,["dog","bird"]

陣列操作

# 為陣列添加元素(會改變原本的 arr)
arr = ["cat", "dog", "bird"]
arr << "apple"                  # 添加在最後面,["cat", "dog", "bird","apple"],concatenation operator
arr.push("fish")               # 添加在最後面,["cat", "dog", "bird","fish"]
arr += ["ice-cream", "sugar"]    # 添加在最後面,["cat", "dog", "bird", "ice-cream", "sugar"]
arr.unshfit(3)                   # 添加在最前面,[3, "cat", "dog", "bird"]
arr.insert(1,"carrot")           # 插入指定位置,["cat","carrot", "dog", "bird"]

# 為陣列刪除元素(會改變原本的 arr)
arr = ["cat", "dog", "bird"]
arr -= ["dog", "bird"]           # 刪除指定元素,["cat"]
arr.pop                          # 刪除最後一個元素
arr.shift                        # 刪除第一個元素

# 其他方法
arr.length                       # 回傳陣列元素數目
arr.count                        # 回傳陣列元素數目
arr.count("cat")                # 回傳陣列元素為 cat 的數目
arr.include?("apple")            # 陣列是否包含該元素
arr.sort!                        # 根據陣列內容排序
arr.sort! { |a, b| a <=> b }     # 如果要換排序方式可以改成 b <=> a

[*1..52].select { |i| i.odd? }    # 選擇陣列中的元素
[*1..52].sample 5                 # 從陣列中隨機抽取 5 個元素
[*1..52].shuffle                  # 將陣列元素順序打亂

輸出元素

arr.inspect
arr.to_s
arr.to_h     # 陣列轉雜湊

Array.to_h陣列轉雜湊(array to hash)

[[:cat, :dog], [1, 2]].to_h    # => {:cat => :dog, 1 => 2}

實做看看會讓自己更印象深刻

把陣列 [1, 2, 3, 4, 5] 變成 [1, 3, 5, 7, 9]

list = [1, 2, 3, 4, 5]
resault = []
list.each do |i|
resault << i * 2 - 1
end

p resault 
#=> [1,3,5,7,9]

也可以用map的方式來做
list = [1, 2, 3, 4, 5]
p list.map { |i| i * 2 - 1 }    # [1, 3, 5, 7, 9]

想要印出 1 ~ 100 的總合怎麼做呢

#第一種方式是先把(1..100)轉成陣列然後跑迴圈
total = 0

(1..100).to_a.each do |i|
  total = total + i
end

puts total    # 得到 5050

#[*1..100] 範圍1..100 跑迴圈

total = 0

[*1..100].each do |i|
  total = total + i
end

puts total    # 得到 5050

還有一個更簡單的方式 使用reduce

puts [*1..100].reduce(0) { |total, i| total + i }
#=> 要注意的是 使用reduce方式如果沒有帶參數給他的話 他會使用傳近來的第一個數字當成值
已上面例子來說 如果你沒帶0給他的話 那total 將會是1 

我想隨機選五個數字該怎麼做?

puts [*1..52].shuffle.first(5)
#從1..52 當中 打亂洗牌(shuffle) 然後從最上面取 5 張出來

puts [*1..52].sample(5)
#從1..52中取五個

上一篇
DAY7 字串(string)
下一篇
DAY9 符號(Symbol)
系列文
毫無基礎學習 Ruby on Rails 的 甘苦心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言