Skip to content

Commit 72a56b3

Browse files
authored
Merge pull request #30 from KyleLin0501/master
6array1-6
2 parents 3b5bb4b + 9a1650f commit 72a56b3

7 files changed

Lines changed: 183 additions & 31 deletions
Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
1-
# TODO
1+
# 儲存資訊
22

3-
TODO:TODO
3+
目標:將新的項目加入陣列。
44

55
## 簡介
66

7-
TODO
7+
下列程式碼中指定了一個整數陣列,稱為 `rows` 。你的目標是在這個陣列中加入值,來將角色實例放置在關卡世界的每一行。
8+
9+
若要將項目加入陣列,請按下並拖移中括號 `[]` ,或輸入新的值並以逗號分隔。
10+
11+
查詢註解來取得編寫程式碼的相關提示。
12+
13+
>範例
14+
>
15+
> // 這是一條程式碼註解。它會提供程式碼的相關資訊,但 App 不會執行這條註解。
16+
17+
1. 執行程式碼來看看會發生什麼。
18+
19+
2. 在陣列中加入值來將你的角色放置在關卡世界的每個磚塊上。
820

921
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/652c7590-ef26-4fdd-9f25-3dd8f9c46900/public)
1022

1123
## 講解
1224

13-
TODO
25+
若要通關,你要試著在陣列中加入值,讓角色能放置到每個磚塊上。
26+
27+
除此之外,適實的使用註解能讓你更清楚每個段落在做什麼喔!
28+
1429

1530
## 解答
1631

@@ -23,4 +38,9 @@ placeCharacters(at: rows)
2338

2439
## 後記
2540

26-
TODO
41+
是不是很酷?
42+
43+
當你要在陣列中加入項目時,只需要加入一個逗號和一個與陣列中其他項目類型相符的項目。
44+
45+
請記住,建立特定類型的陣列(例如,整數陣列)之後,這個陣列便不能包含不同類型的項目了(例如 `String`
46+

docs/swift-learning-2/6-arrays/2-iteration-exploration.md

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
1-
# TODO
1+
# 探索反覆運算
22

3-
TODO:TODO
3+
挑戰:反覆運算陣列,在各個位置放置寶石和開關
44

55
## 簡介
66

7-
TODO
7+
在下方程式碼中,你可以使用 `columns` **陣列**來在關卡世界中的每個直欄放置寶石和開關。此過程叫做**反覆運算**,它可以讓你在陣列中為每個項目執行動作。
8+
9+
>範例
10+
>
11+
>若要反覆運算,請使用 for-in 迴圈,它是一種 **for 迴圈**的類型
12+
>
13+
>```
14+
>for currentColumn in colums {
15+
> world.place(Gem(),atColumn:currentColumn , row:1)
16+
>}
17+
>```
18+
`for-in` 迴圈中會在陣列中替每個**變數**執行程式碼區塊。在上方範例中, `currentColumn` 是儲存 `columns` 陣列中數值的變數。此數值會傳遞到 `place` 方法的 `column` **參數**,以決定要放置寶石的直欄。
19+
20+
每次 `for-in` 迴圈執行時, `currentColumn` 會前往陣列中的下一個項目,直到沒有剩下的項目。
21+
22+
1. 完成會在陣列中反覆運算的的 `for` 迴圈。
23+
24+
2. 在迴圈中,在每個直欄放置寶石和開關。
25+
826
927
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/ff0fc349-2ee3-4ad4-7aa5-4df7baf76800/public)
1028
1129
## 講解
1230
13-
TODO
31+
試著在迴圈中放置寶石和開關,就能輕鬆完成任務了!
1432
1533
## 解答
1634
@@ -26,4 +44,6 @@ for currentColumn in columns {
2644
2745
## 後記
2846

29-
TODO
47+
現在你學會反覆運算了!
48+
49+
採用**反覆運算**陣列的方式來建構世界,比一次只放置一個項目要快得多。若要反覆運算陣列,請使用 for-in 迴圈為陣列中的每個項目執行動作

docs/swift-learning-2/6-arrays/3-stacking-blocks.md

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
1-
# TODO
1+
# 堆疊磚塊
22

3-
TODO:TODO
3+
目標:在每個角落放置五層磚塊。
44

55
## 簡介
66

7-
TODO
7+
查看下列程式碼。這是一個 `Coordinate` 類型的陣列,而不是 **Int** 值的陣列。
8+
>`Coordinate類型`
9+
>
10+
>`Coordinate` 實例使用 `column``row` 引數來參照一個位置。
11+
>
12+
>`let corner = Coordinate(column: 3,row: 3)`
13+
14+
你可以使用 `blockLocations` 陣列反覆運算每個座標,並在每個位置上執行某項操作,例如:
15+
>範例
16+
>
17+
>```
18+
>for coordinate in blockLocations{
19+
> world.place(Gem(), at: coordinate)
20+
>}
21+
>```
22+
23+
1. 加入了兩個座標到 `blockLocations` 中,每個座標參照世界中剩於的角落。
24+
25+
2. 使用 `for-in` 迴圈**反覆運算**每個座標,在每個角落放置**五個磚塊**。(你可能需要**嵌套**其他 **for 迴圈**。)
26+
827
928
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/25f474c7-9bc0-4d77-d150-1d4f3faa0200/public)
1029
1130
## 講解
31+
首先,將四個角落的位置加入 `blockLocations` 陣列中。
1232
13-
TODO
33+
接著,試著在迴圈中再加入一個迴圈,並重複執行五次堆疊磚塊的動作,就能輕鬆完成目標!
1434
1535
## 解答
1636
@@ -32,4 +52,6 @@ for coordinate in blockLocations {
3252
3353
## 後記
3454

35-
TODO
55+
好極了!
56+
57+
你可能已經注意到, `place(item: Item, at:Coordinate)` **方法**採用了 `Coordinate` 類型的輸入,而 `place(item: Item, atColumn: Int, row: Int)` 則採用兩個 **Int** 值。這兩種方法都可以用來放置項目,但在本章節中,你將使用 `place(item: Item, at: Coordinate)` ,因為要配合 `Coordinate` 類型的陣列一起使用。

docs/swift-learning-2/6-arrays/4-getting-in-order.md

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,49 @@
1-
# TODO
1+
# 依序排列
22

3-
TODO:TODO
3+
目標:將 Blu 、 Hopper 和專家依照身高排序
44

55
## 簡介
66

7-
TODO
7+
你可以使用`陣列`**類型**的一組方法,在**陣列**中加入項目或從中移除項目。
8+
>陣列方法
9+
>
10+
>`remove(at: Int)`。移除**索引**中的一個項目。
11+
>
12+
>`append(newElement: Element)`。在陣列結尾處加入一個項目。
13+
>
14+
>`insert(newElement: Element, at: Int)`。在特定的索引插入一個項目。
15+
16+
使用**點記法**在陣列上呼叫方法。
17+
18+
>範例
19+
>
20+
>`var favoriteFoods = [🌮, 🍓, 🍣, 🍳, 🧀]`
21+
>
22+
>`favoriteFoods.remove(at: 2)`
23+
>
24+
>呼叫`remove(at: 2)`會將🍣從陣列中移除。
25+
>
26+
>`//[🌮, 🍓, 🍳, 🧀]`
27+
>
28+
>`favoriteFoods.insert(🍝,at: 1)`
29+
>
30+
>呼叫`insert(🍝,at: 1)`會在索引1加入🍝。
31+
>
32+
>`//[🌮, 🍝, 🍓, 🍳, 🧀]`
33+
34+
1. 在下方的 `characters` 陣列中,移除傳送門和寶石。
35+
36+
2. 插入一個 `Expert` 類型實例,使角色依照最矮在前(row 0)最高在後的順序排列。
37+
838

939
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/e12033ea-49b9-42ba-58aa-b8b0385a2c00/public)
1040

1141
## 講解
1242

13-
TODO
43+
在開始解題之前,可以先看看目前的程式是如何執行,再想想如何將傳送門和寶石移除
44+
45+
接著再插入角色並將角色進行排序,就可以完成關卡!
46+
1447

1548
## 解答
1649

@@ -39,4 +72,17 @@ for character in characters {
3972

4073
## 後記
4174

42-
TODO
75+
你學得非常快!
76+
77+
掌握如何使用陣列**索引**存取和修改項目十分好用。
78+
79+
你還可以運用提供給你的其他**方法**來修改陣列:
80+
81+
`removeFirst()`
82+
83+
`removeLast()`
84+
85+
`removeAll()`
86+
87+
嘗試使用這些方法,看看它們如何運作!
88+

docs/swift-learning-2/6-arrays/5-appending-to-an-array.md

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
1-
# TODO
1+
# 附加到陣列
22

3-
TODO:TODO
3+
目標:依據座標屬性來附加到空的陣列。
44

55
## 簡介
66

7-
TODO
7+
將項目個別加入陣列中,存粹是重複性的操作。要是能夠建立一套規則來將座標包含在陣列中呢?
8+
9+
首先,從 `allCoordinates` 開始,這是由關卡世界中所有座標組成的**陣列**
10+
11+
接著,你需要一個空的陣列,讓這些座標可以附加在其中。由於要**宣告**一個未儲存任何值的陣列,因此需要指定它應該容納的項目**類型**
12+
13+
>建立空的陣列
14+
>
15+
>在變數名稱後使用:來宣告其類型,然後將它**指定**為空的陣列。
16+
>
17+
>`var newLocations: [Coordinate] = []`
18+
19+
最後,**反覆運算** `allCoordinates` 並檢查每個座標的 `column``row` **屬性**。如果座標的 `column` 屬性大於5或 `row` 屬性小於4,則將它附加到空的陣列中。然後將六個磚塊放置在陣列中的每個座標上。
820

921
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/35124c1a-b596-4982-fdc3-3724eaa6fd00/public)
1022

1123
## 講解
1224

13-
TODO
25+
首先,要將範圍內的值(座標的 `column` 屬性大於5或 `row` 屬性小於4)加入 `append` 到 blockSet 陣列中。
26+
27+
接著,將 blockSet 陣列中的座標加上6塊磚塊(可用 for-in 迴圈重複執行6次)
28+
29+
就能達成關卡目標了!
1430

1531
## 解答
1632

@@ -33,4 +49,8 @@ for coordinate in blockSet {
3349

3450
## 後記
3551

36-
TODO
52+
很好!
53+
54+
陣列會引領你走向建構世界的新世界!請記住,你可以建立完全空白的陣列,稍後再向其中加入值,但是你必須指明該陣列包含的項目類型。當你**宣告**陣列時,請使用下列**語法**為它指定類型:
55+
56+
`var placementLocations: [Coordinate]`

docs/swift-learning-2/6-arrays/6-island-builder.md

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,35 @@
1-
# TODO
1+
# 島嶼建構者
22

3-
TODO:TODO
3+
挑戰:建構一座四面環海的島。
44

55
## 簡介
66

7-
TODO
7+
厭倦了內陸世界嗎?使用程式碼來創造你自己的島嶼!
8+
9+
首先,建立兩個用來儲存座標的空**陣列**。其中一個儲存島嶼的座標,另一個則儲存海洋的座標。
10+
11+
接著,在 **if 語句**中編寫一組條件,將座標附加到島嶼陣列中。這些座標應該位於地圖的中心,而且可能是3x3或4x4的磚塊。將不符合這些條件的所有座標附加到海洋的陣列中。
12+
13+
>加入水
14+
>
15+
>若要加入水,請先移除現有的磚塊。
16+
>
17+
>`world.removeAllBlocks(at: coordinate)`
18+
>
19+
>`world.place(Water(), at: coordinate)`
20+
21+
將座標附加到每個陣列後,在島嶼陣列的每個座標上放置磚塊,並在海洋陣列的每個座標上放置水。祝你好運!
22+
823

924
![img](https://imagedelivery.net/cdkaXPuFls5qlrh3GM4hfA/b1d5dc48-cc83-4128-00fc-de600dc24f00/public)
1025

1126
## 講解
1227

13-
TODO
28+
1. 先建立兩個陣列來存放陸地和海洋的位置
29+
30+
2. 使用 `if-else` 判斷,將陸地和海洋位置分別新增至兩個陣列
31+
32+
3.`for` 迴圈中執行海洋陣列中有的座標位置,並將這些位置的陸地移除並加上水
1433

1534
## 解答
1635

@@ -43,4 +62,9 @@ for coordinate in sea {
4362

4463
## 後記
4564

46-
TODO
65+
你的能力不斷增強!
66+
67+
你可以使用陣列既快速又有效地管理大量資訊,進而建構精彩的世界。
68+
69+
你有沒有注意到陣列 `allCoordinates` 如何被初始化?你可以使用 world 實例的 `allPossibleCoordinates` **屬性**取得關卡世界中所有座標的陣列,藉此反覆運算每個座標。是不是很酷呢?
70+

docs/swift-learning-2/6-arrays/8-fixing-array-out-of-bounds-errors.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,4 @@ teamBlu[8].jump()
6161
6262
## 後記
6363
64-
請記住,找出程式錯誤並加以修正,是成為程式設計師不可或缺的重要部分!索引越界錯誤是導至 App 當機的常見錯誤程式之一設計程式碼時,請隨時檢查你的程式碼,確保沒有嘗試存取陣列中不存在的部分
64+
請記住,找出程式錯誤並加以修正,是成為程式設計師不可或缺的重要部分!索引越界錯誤是導至 App 當機的常見錯誤程式之一設計程式碼時,請隨時檢查你的程式碼,確保沒有嘗試存取陣列中不存在的部分

0 commit comments

Comments
 (0)