Ruby Array 的一些筆記
Table of Contents
紀錄一下我覺得值得一提的那些陣列兩三事
給予陣列預設值 ¶
> Array.new(3, "str")
=> ["str", "str", "str"]
> Array.new([1, 2, 3])
=> [1, 2, 3]
> Array.new(3) {|i| i * 3}
=> [0, 3, 6]
# 要注意的是用預設值,所有元素都會指向同一個參考位址
> arr = Array.new(3, "a")
=> ["a", "a", "a"]
> arr[0].next!
=> "b"
# 全部的預設值元素都變成 "b" 了
> arr
=> ["b", "b", "b"]
新增元素 ¶
> arr = []
=> []
# 在結尾插入
> arr.push("Bear")
=> ["Bear"]
# 在結尾插入
> arr << "Candy"
=> ["Bear", "Candy"]
# 在開頭插入
> arr.unshift("Andy")
=> ["Andy", "Bear", "Candy"]
# 合併陣列
> arr.concat ["Other", "Another"]
=> ["Andy", "Alex", "Bear", "Dennis", "Emily", "Other", "Another"]
# 以上方法都會改變原本陣列的值
# 合併陣列
> arr = arr + ["Dennis", "Emily"]
=> ["Andy", "Alex", "Bear", "Dennis", "Emily"]
填滿某個值 ¶
arr = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
# 全部歸零
arr.fill(0)
=> [0, 0, 0, 0, 0]
# 談入對應的索引
arr.fill { |index| index }
=> [0, 1, 2, 3, 4]
一次取得多個不同索引的元素 ¶
> [1, 2, 3, 4, 5].values_at(1, 2, 3)
=> [2, 3, 4]
清除陣列中全部的 nil
¶
> arr = [1, nil, 2, nil, 3]
=> [1, nil, 2, nil, 3]
# 只是回傳清除 nil 後的結果,但不會改變陣列的值
> arr.compact
=> [1, 2, 3]
> arr
=> [1, nil, 2, nil, 3]
# 要用 compact! 才會改變陣列的值
> arr.compact!
=> [1, 2, 3]
> arr
=> [1, 2, 3]
一邊取出陣列的值一邊運算的寫法 ¶
arr.pop
也能改成 app.shift
> arr = [1, 2, 3]
> while item = arr.pop
> puts item
> end
3
2
1
=> nil
> arr
=> []
根據型態,呼叫 *
方法會有不同的結果 ¶
> [ 1, 2, 3 ] * 3
=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
# * 字串會跟 join 方法一樣結果
> [ 1, 2, 3 ] * ","
=> "1,2,3"
轉置矩陣 ¶
# 矩陣
# | 1, 2, 3|
# | 4, 5, 6|
arr = [[1, 2, 3], [4, 5, 6]]
=> [[1, 2, 3], [4, 5, 6]]
# 旋轉後
# | 1, 4|
# | 2, 5|
# | 3, 6|
> arr.transpose
=> [[1, 4], [2, 5], [3, 6]
# 不會改變陣列的值
> arr
=> [[1, 2, 3], [4, 5, 6]]
求陣列長度 ¶
# 一般
> [1, nil, nil, 3, nil, 4].length
=> 6
# 取得非 nil 的元素個數
> [1, nil, nil, 3, nil, 4].nitems
=> 3
參考: ¶
另外關於操作集合的技巧可以參考: