iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

有了 LeetCode 的列表以及詳細頁,接下來我們要建立 LeetCode 知識,逐步填滿裡面的資料,並藉由填滿 App 資料的過程中,也充實我們腦中的知識庫。

什麼是陣列

首先我們介紹的是陣列,這個資料結構在所有程式語言中都會出現,它屬於連續空間,也就是說,它不能刪除其中的空間,有幾個特性如下:

  • 索引值由 0 開始,不是 1
  • 一開始要決定陣列的大小
  • 要刪掉其中的值,只能用覆蓋的方式

Swift 的陣列

可是,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"]

什麼是字串

字串無疑就是拿來放文字使用,但我們常常在呈現文本的時候,需要做資料過濾處理,好讓最終畫面上是我們要的文字,這時候免不了會做一些邏輯上的處理。

Swift 字串

一開始可以直接宣告你的文字內容,並作相應的組合。

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 也一定無法避開這兩個資料結構的使用,所以學起來非常划算,如果要更深入了解,可以參考官方文件。


上一篇
Day 11: LeetCode題目詳情頁面,使用 SwiftUI Group 和 AttributedString
下一篇
Day 13: SwiftUI 展示『陣列與字串』 題目及解說
系列文
用 SwiftUI 魔法變出 Leetcode 刷題知識學習 App!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言