琢磨了一會兒「H排9號」後,我突然靈光一閃,脫口而出:「索引是不是座標的一種?」
小孩眼睛一亮,笑著點頭:「你很敏銳嘛,沒錯。兩者有很多相同之處。像是座標跟陣列一樣,通常都從 0 開始,而不是 1。」
「我知道座標從 0 開始,但是為什麼陣列也是這樣?」我皺著眉。
小孩笑著解釋:「因為這個數字也代表資料相對於起點的存放位置。第一個資料佔據的就是 0 到 1 這段區間,第二個資料則是 1 到 2 的區間。因此第一個資料的索引是 0 。」
「原來如此。」
平常都是用數量來做編號,所以才會從 1 開始,如果是用位置,那的確從 0 開始更合理。
「既然你理解了,那我就開始說明程式碼的部分囉。」
他在半空中一揮手,眼前的空間和上次一樣浮現出閃閃發亮的程式碼:
val seats = arrayOf(0, 0, 1, 0, 0)
「這是一維陣列。」他指著那串數字,「我讓陣列存進每個座位的售票狀態。0 表示空位,1 表示已經賣出。現在你看到的狀態,是只有第三個座位有人買票。」
他眨眨眼:「你覺得我要怎麼寫才能拿到第一個座位的狀態?」
我心想既然是0,就直接在後面寫0吧,於是大膽地寫下了:
seats0
小孩馬上笑出聲來:「可惜唷,差一點。正確的寫法是 seats[0]。」
「咦?還要加中括號?」我疑惑。
「沒錯,中括號就像是一種對照關係。你問 0 號座位,電腦就對照出 seats 裡的第 0 個位置。這樣才能準確找到對應的資料。」
小孩隨即又一揮手,眼前的程式碼立刻變了樣,從單純的一行橫排,變成整齊的多行排列。
val seats = arrayOf(
arrayOf(0, 0, 1, 0, 0), // 第一排
arrayOf(0, 1, 0, 0, 0), // 第二排
arrayOf(1, 0, 0, 0, 0) // 第三排
)
「現在我用二維陣列,你告訴我第一排第一個座位號碼是?」
我猶豫了一下。既然一維要用一個中括號,那二維是不是就要用兩個?我深吸一口氣,寫下:
seats[0][0]
小孩立刻拍手大笑:「非常完美,就是這樣!」
我心裡一陣暢快,原來還滿簡單的嘛。