有了 LeetCode 的列表以及詳細頁,接下來我們要建立 LeetCode 知識,逐步填滿裡面的資料,並藉由填滿 App 資料的過程中,也充實我們腦中的知識庫。
首先我們介紹的是陣列,這個資料結構在所有程式語言中都會出現,它屬於連續空間,也就是說,它不能刪除其中的空間,有幾個特性如下:
可是,Swift 的陣列並不是你想像中的陣列,它只保留了索引值是由 0,開始的特性,它並不需要一開始就決定大小,也不用因為固定大小的關係,再刪除的時候需要用覆蓋的方式,這一切是因為 Swift 屬於高階語言。
let oddNumbers = [1, 3, 5, 7, 9, 11, 13, 15]
let names = ["Ben", "Anna", "Cindy"]
一開始我們就可以直接放上我們想要的型態跟資料,不需要特別宣告。
var emptyDoubles: [Double] = []
var emptyFloats: Array<Float> = Array()
var digitCounts = Array(repeating: 0, count: 10)
print(digitCounts)
// Prints "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"
當然想要宣告且不想一開始就有資料的話,可以這樣寫,比較特別的是,Swift 推薦陣列寫法是用簡寫的方式 [Double]
,這在其他語言中比較沒有看到的寫法。
也可以定義大小去塞滿一樣的值 Array(repeating: 0, count: 10)
,靈活性非常高。
var numbers = [1, 2, 3, 4, 5]
var numbersCopy = numbers
numbers[0] = 100
print(numbers)
// Prints "[100, 2, 3, 4, 5]"
print(numbersCopy)
// Prints "[1, 2, 3, 4, 5]"
影響索引值的資料就會是從 0 改掉,而且要注意一個地方是,numbersCopy = numbers
是屬與拷貝的動作,不是指定同一個記憶體位置,所以會發現印出來裡面的參數不一樣。
var students = ["Ben", "Ivy", "Jordell"]
// 新增
students.append("Maxime")
students.append(contentsOf: ["Shakia", "William"])
// 刪除
students.remove(at: 0)
// ["Ivy", "Jordell", "Liam", "Maxime", "Shakia", "William"]
students.removeLast()
// ["Ivy", "Jordell", "Liam", "Maxime", "Shakia"]
字串無疑就是拿來放文字使用,但我們常常在呈現文本的時候,需要做資料過濾處理,好讓最終畫面上是我們要的文字,這時候免不了會做一些邏輯上的處理。
一開始可以直接宣告你的文字內容,並作相應的組合。
let name = "LeetCode"
let personalizedGreeting = "Welcome, \(name)!"
// personalizedGreeting == "Welcome, LeetCode!"
let greeting = "Welcome!"
let longerGreeting = greeting + " We're glad you're here!"
// longerGreeting == "Welcome! We're glad you're here!"
進階用法如下,我們可以釐清空格所在的索引值,然後過濾索引值前面的字串,這個寫法很特別,還沒在其他語言看過。
let name = "Hello LeetCode"
let firstSpace = name.firstIndex(of: " ") ?? name.endIndex
let firstName = name[..<firstSpace]
// firstName == "Hello"
這個資料結構其實算是簡單的,但是 LeetCode 題目很利用這個資料結構做各式各樣的操作,所以必須要十分熟練,而製作 App 也一定無法避開這兩個資料結構的使用,所以學起來非常划算,如果要更深入了解,可以參考官方文件。