iT邦幫忙

DAY 9
2

Ruby女孩:10萬.times { puts "為什麼?" }系列 第 9

Ruby女孩(9):老媽,你不能決定,讓我用紅寶石的陣列幫你決定吧!

  • 分享至 

  • xImage
  •  

今天要來提提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中陣列的兩大特點:

※特點一:型別未定(untyped)
陣列中的元素並不需要全部屬於相同的類別,所以上面的例子你可以看到,可以放數字、字串、範圍、運算式,也可以數字、字串混搭,甚至在陣列中再加入陣列也可以!

※特點二:可改變(mutable)
可以動態調整陣列的大小,意指可以添加元素。

如果你懶得像上面那樣慢慢打出陣列的內容,你也可以使用 %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.

其實在學的過程中,也是常常撞牆,也有一直讀不通,也有很想跳過的部分,但還是希望自己可以突破,不然我哪兒也去不了!


上一篇
Ruby女孩(8):字串迭代小練習!
下一篇
Ruby女孩(10):["十年","好姐妹","陣列萬歲"]
系列文
Ruby女孩:10萬.times { puts "為什麼?" }30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言