今天要來提提Ruby 的 陣列(Array),首先我們先來閱讀一小段書中文字(p.67):
『陣列是一個由值所構成的序列,允許你透過位置或索引值以循序的方式存取其中的值。Ruby 中,陣列的第一個值會被擺在索引值為0 的位置上。』
我們先來看看陣列的簡單範例:
這是陣列:[6, 8, 9]
這也是陣列:["你", "看", "看", "你"]
就算混搭也還是陣列:["你", 6, "看", 8, "看", 9, "你"]
不可質疑你的陣列:[[6, 8, 9], ["你", "看", "看", "你"], ["忘", "了"]]
還可以這樣的陣列:[ -99..-1, 0, 1..99 ]
你想怎樣就怎樣的陣列(?):[ x*y, x+y, x-y ] #要先宣告x 和y 是什麼才可以用噢!
你不想放任何東西也是陣列:[]
希望初學者不要昏頭了,上面這些都是陣列,其實陣列是我在學Ruby 時覺得最好理解的部分了!以下整理Ruby 中陣列的兩大特點:
如果你懶得像上面那樣慢慢打出陣列的內容,你也可以使用 %w
或 %W
[註1],用法如下:
%w(你 看 看 你) # => ['你','看','看','你']
%W(你看看 你) # => ["你看看", "你"]
[註1] %w
是把字串實字以單引號表示; %W
是把字串實字以雙引號表示,有點類似於之前在字串的文章中所提的 %q
與 %Q
。
接著我們來看看陣列的取值(與字串取值很雷同):
a = ["你", 6, "看", 8, "哈", 9, "嘎"]
a[0] # => "你" 第一個字的索引值為0!切記!
a[-1] # => "嘎" 倒數第一個字
a[3] # => 8
#選出"看"、"8"、"哈"的方式:
a[2,3] # => ["看", 8, "哈"] 索引值為2開始,往右找三個值出來
a[2..4] # => ["看", 8, "哈"] 索引值為2開始,找到索引值為4停止
#超過陣列範圍就沒有東西
a[99] # => nil
看起來跟字串的取值很像吧!來講個我學了Array 以後,在生活上用到的例子:
我媽前陣子一直在猶豫要不要退休,看起來就跟撕花瓣想對方愛不愛我一樣苦惱,為了維護大自然,我們不撕花瓣,我們寫Ruby:
#寫一個放兩個字串值的陣列,並把字串取名叫做i_suggest [註2]
i_suggest = ["我要退休!我要出去玩!", "算了再工作一陣子好惹!"]
#然後用Array的方法.sample來隨機取得一個Array中的值
i_suggest.sample
i_suggest.sample #=> "算了再工作一陣子好惹!"
i_suggest.sample #=> "我要退休!我要出去玩!"
#老媽你不能決定,那我就讓紅寶石幫你決定吧XD!
[註2]別忘了變數命名方式,可參考我的第四天文章中的識別字部分
看了上面的例子,其實也可以想到,既然Array有.sample
的方法,應該可以寫一個樂透程式吧!我們也來偷渡一個這部分書上還沒寫出的方法:.to_a
(昨天我們講過.to_i
、.to_s
)
.to_a
可以把東西變成Array,所以我們可以把範圍變成Array 後,再讓它隨機跑出6個值:
#大樂透的號碼範圍
(1..49)
#把範圍變成Array
(1..49).to_a
#從這個Array中隨機找出六個值
(1..49).to_a.sample(6)
#跑個三次看看結果:
(1..49).to_a.sample(6) #=> [11, 43, 18, 36, 16, 2]
(1..49).to_a.sample(6) #=> [30, 12, 17, 9, 29, 24]
(1..49).to_a.sample(6) #=> [12, 10, 11, 18, 19, 40]
如果Ruby 幫你中樂透,別忘了我XD,我是說,跟我分享這個好消息啦XD
OK,明天再來分享Array 的運算,Array 的部分就能先告一段落!
第九天,我想到這句話:
If you fear failure, you will never go anywhere.
其實在學的過程中,也是常常撞牆,也有一直讀不通,也有很想跳過的部分,但還是希望自己可以突破,不然我哪兒也去不了!