0Pricing
Swift Academy · บทเรียน

คอลเลกชัน

คอลเลกชัน

คอลเลกชัน เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 1 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 1 บทเรียน

บทนำ

สวัสดีครับ/ค่ะ

ในบทเรียนนี้ เราจะเรียนรู้เกี่ยวกับชนิดคอลเลกชันใน Swift ซึ่งเป็นหนึ่งในหัวข้อที่สำคัญที่สุด

ถ้าอย่างนั้นมาเริ่มกันเลย

Swift มีชนิดคอลเลกชัน 3 ชนิด

อาร์เรย์ → ชนิดคอลเลกชันแบบลำดับ

เซต → ชนิดคอลเลกชันที่ไม่มีลำดับและมีค่าไม่ซ้ำกัน

ดิกชันนารี → ชนิดคอลเลกชันที่ไม่มีลำดับและอยู่ในรูปคู่คีย์-ค่า

เปลี่ยนแปลงได้ - เปลี่ยนแปลงไม่ได้

การที่ชนิดคอลเลกชันของเราจะเปลี่ยนแปลงได้หรือไม่ได้นั้นขึ้นอยู่กับวิธีที่เรากำหนด

หากเรากำหนดด้วยคำสั่ง let คอลเลกชันจะเปลี่ยนแปลงไม่ได้ แต่หากกำหนดด้วย var คอลเลกชันจะเปลี่ยนแปลงได้

หากค่าที่เรากำหนดจะไม่เปลี่ยนแปลงในภายหลัง การใช้ let จะช่วยให้คอมไพเลอร์ทำงานได้อย่างมีประสิทธิภาพมากขึ้น

อาร์เรย์

อาร์เรย์

อาร์เรย์เป็นชนิดคอลเลกชันที่ใช้เก็บข้อมูลตามลำดับ ตั้งแต่ Swift เวอร์ชัน 3 สมาชิกทั้งหมดในอาร์เรย์ไม่จำเป็นต้องเป็นชนิดเดียวกัน

ไวยากรณ์สำหรับการกำหนดอาร์เรย์อย่างง่ายแสดงอยู่ในตัวอย่างด้านล่าง

// Let's create an empty array.
var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Prints "someInts is of type [Int] with 0 items."

สร้างอาร์เรย์ด้วยค่าเริ่มต้น

สร้างอาร์เรย์ด้วยค่าเริ่มต้น

ในบางกรณี เราอาจต้องการสร้างอาร์เรย์ที่มีค่าเริ่มต้นและขนาดที่กำหนดไว้ สำหรับการทำเช่นนี้ เราต้องส่งอาร์กิวเมนต์สองรายการให้กับตัวสร้างอาร์เรย์

อาร์กิวเมนต์เหล่านี้ระบุว่าค่าเริ่มต้นคืออะไร และอาร์เรย์จะมีองค์ประกอบกี่รายการ

var threeDoubles = Array(repeating: 0.0, count: 3)
print(threeDoubles)
// threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
print(anotherThreeDoubles)

var sixDoubles = threeDoubles + anotherThreeDoubles
print(sixDoubles)
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

การสร้างอาร์เรย์โดยใช้ลิเทอรัลของอาร์เรย์

การสร้างอาร์เรย์โดยใช้ลิเทอรัลของอาร์เรย์

จากตัวอย่างก่อนหน้านี้ เราได้เรียนรู้วิธีสร้างอาร์เรย์ว่างแล้ว อย่างไรก็ตาม ในบางกรณีเราอาจต้องการสร้างอาร์เรย์ด้วยลิเทอรัลของอาร์เรย์

มาเรียนรู้การใช้งานจากตัวอย่างกัน

/*
We have defined a variable named catList, 
and with the [String] statement we specified 
that its type is an Array containing String elements.
*/
var catList: [String] = ["Garfield", "Tom"]
print(catList)
/*
It will understand that the array is an Array containing
String statements, since we assign a value that 
defines the variable. (Swift type inference)
*/
var shoppingList = ["Eggs", "Milk"]
print(shoppingList)

การเข้าถึงค่าในอาร์เรย์

การเข้าถึงค่าของอาร์เรย์

เมื่อเราต้องการเข้าถึงสมาชิกตามดัชนีที่กำหนดในลำดับ ก็เพียงเรียกใช้ด้วยไวยากรณ์ต่อไปนี้

myArray [index]

ลองดูตัวอย่างกัน

// We have defined an array with 3 elements of type Int.
var numbers:[Int] = [1, 5, 21]

// Arrays start from Index 0. For example, in order to reach the value 5, which is the 2nd element, we need to access the 1st index.
var a = numbers[1]
print( "Value of numbers at index 1 is \(a)" )

การเพิ่มสมาชิกใหม่ลงในอาร์เรย์

การเพิ่มสมาชิกใหม่ลงในอาร์เรย์

เราสามารถเพิ่มรายการใหม่ลงในอาร์เรย์ได้ 

ในตัวอย่างด้านล่าง เรากำหนดอาร์เรย์ชื่อ catList จากนั้นในขั้นตอนถัดไป เราได้เพิ่มรายการใหม่ลงในอาร์เรย์นี้ด้วยเมธอด append 

// The Array named catList was defined with 1 initial element.
var catList = ["Tom"]


/*
We are adding a new item with a Garfield 
value using the append method.
*/
catList.append("Garfield")
// Our array will now have 2 elements.


/*
With the + = operator, we can do the 
work that the append method does.
*/
catList += ["Sylvester"]

การเพิ่มข้อมูลที่ดัชนีที่กำหนดในอาร์เรย์

การเพิ่มข้อมูลที่ดัชนีที่กำหนดในอาร์เรย์

ค่าที่เราเพิ่มด้วยเมธอด append ในตัวอย่างก่อนหน้านี้จะถูกเพิ่มต่อท้ายอาร์เรย์ อย่างไรก็ตาม บางครั้งเราอาจต้องการเพิ่มค่าที่ดัชนีที่กำหนด เราจะใช้เมธอด insert สำหรับกรณีนี้

ไวยากรณ์จะมีลักษณะดังนี้

myArr.insert ("The data to add", at: index);

มาดูตัวอย่างเพื่อทำความเข้าใจกัน

var catList = ["Tom"]

catList.insert("Garfield", at: 1)

print(catList)

การลบสมาชิกที่กำหนดในอาร์เรย์

การลบสมาชิกที่กำหนดในอาร์เรย์

ใช้เมธอด remove เพื่อลบสมาชิกที่ดัชนีที่กำหนดในอาร์เรย์

var shoppingList = ["Apple", "Cherry", "Cheese"]

let shoppingListOne = shoppingList.remove(at: 0)
// the item that was at index 0 has just been removed
// the mapleSyrup constant is now equal to the removed "Maple Syrup" string

let shoppingListTwo = shoppingList.removeLast()
// the last item in the array has just been removed

print(shoppingListTwo)

การวนซ้ำอาร์เรย์

เราสามารถวนซ้ำอาร์เรย์ ที่เรามีอยู่ได้ด้วยคำสั่ง for-in

มาดูตัวอย่างกัน

var shoppingList = ["Banana", "Orange", "Milk"]

for item in shoppingList {
    print(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

เซต

เซต

ใช้สำหรับเก็บชุดข้อมูลชนิดเดียวกันไว้ด้วยกันโดยไม่เรียงลำดับ

จากชื่อของเซต เราจะเข้าใจได้ว่าเซตคือชุดข้อมูล และในเซตจะไม่มีองค์ประกอบสองรายการที่มีค่าเหมือนกัน

การสร้างเซตว่าง

เราใช้ตัวอย่างต่อไปนี้เพื่อสร้างเซตว่าง

var catSet = Set<Character>()

การสร้างเซตโดยใช้ลิเทอรัลของอาร์เรย์

การสร้างเซตโดยใช้ลิเทอรัลของอาร์เรย์

สามารถใช้ลิเทอรัลของอาร์เรย์เพื่อสร้างเซตได้ โปรดสังเกตว่า แม้ค่าที่กำหนดไว้ที่นี่จะดูเหมือนอาร์เรย์ แต่ชนิดของตัวแปรคือเซตของสตริง

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

คำเตือน

การใช้ลิเทอรัลของอาร์เรย์ทำให้ไม่สามารถสร้างเซตได้หากไม่ระบุชนิดข้อมูล เพราะอาจทำให้เกิดความสับสนกับอาร์เรย์ ดังนั้นเราจึงต้องระบุชนิดข้อมูล 

อย่างน้อยควรใช้งานดังต่อไปนี้

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

เมธอดของเซต

เมธอดของเซต

มาดูตัวอย่างกัน

var favoriteGenres = ["Funk"]

print("I have \(favoriteGenres.count) favorite music genres.")

if favoriteGenres.isEmpty {
    print("favoriteGenres is empty")
} else {
    print("I have particular music preferences.")
}

if favoriteGenres.contains("Funk") {
    print("Funk")
} 

การวนซ้ำเซต

การวนซ้ำเซต

ชนิดเซตของสวิฟต์ไม่มีลำดับ อย่างไรก็ตาม สามารถใช้เมธอด sorted เมื่อต้องการวนซ้ำค่าของเซตได้ เมธอดนี้จะจัดองค์ประกอบของเซตให้อยู่ในรูปอาร์เรย์

let favoriteGenres = ["Classical","Jazz", "Hip hop"]

for genre in favoriteGenres {
    print("\(genre)")
}
// Classical
// Jazz
// Hip hop

พจนานุกรม

พจนานุกรม

พจนานุกรมเป็นชนิดข้อมูลแบบชุดที่เก็บค่าในรูปคู่คีย์กับค่า และไม่มีการเรียงลำดับ

แต่ละค่าจะถูกเก็บไว้พร้อมคีย์ที่ไม่ซ้ำกัน ซึ่งทำหน้าที่เป็น ID ของค่านั้นในพจนานุกรม พจนานุกรมไม่มีลำดับเหมือนอาร์เรย์ เราอาจนึกภาพพจนานุกรมในโลกจริงเพื่อทำความเข้าใจได้

ดังนั้น เอกลักษณ์ของแต่ละค่าจึงสำคัญกว่าลำดับ

สามารถกำหนดชนิดพจนานุกรมด้วยรูปแบบย่อ [คีย์: ค่า] โดยนิยมใช้รูปแบบย่อนี้มากกว่า

var namesOfIntegers = [Int: String]()
// namesOfIntegers is an empty [Int: String] dictionary

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type [Int: String]

วิธีเข้าถึงพจนานุกรม

เราสามารถตรวจสอบว่าพจนานุกรมมีองค์ประกอบกี่รายการได้ด้วยเมธอดนับจำนวน

นอกจากนี้ เรายังตรวจสอบได้ว่าพจนานุกรมว่างหรือไม่ด้วยเมธอด isEmpty

มาลองใช้เมธอดเหล่านี้กับตัวอย่างกัน

var airports = ["LHR": "London", "IST": "Istanbul"]

print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items."

if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}
// Prints "The airports dictionary is not empty."

airports["LHR"] = "London"
// the airports dictionary now contains 3 items

ตัวห้อย

การดึงค่าด้วยตัวห้อยทำได้ดังนี้ ผลลัพธ์ที่คืนมาจะเป็นค่าแบบเลือกได้

var airports = ["DUB":"Dublin"]

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}
// Prints "The name of the airport is Dublin Airport."



//Deletion
airports["APL"] = nil

if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue).")
} else {
    print("The airports dictionary does not contain a value for DUB.")
}
// Prints "The removed airport's name is Dublin Airport."

การอัปเดตพจนานุกรม

นอกจากการใช้ตัวห้อยตามที่กล่าวไปแล้ว ยังมีเมธอดสำหรับอัปเดตพจนานุกรมด้วย

จุดเด่นของเมธอดนี้คือ หลังจากอัปเดตเสร็จแล้ว เมธอดจะคืนค่าเดิมก่อนการอัปเดตกลับมา

var airports = ["DUB": "Dublin"]

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value for DUB was \(oldValue).")
}
// Prints "The old value for DUB was Dublin."

ตัวอย่างการแปลงจากพจนานุกรมเป็นอาร์เรย์ด้านล่างนี้

ตัวอย่างการแปลงจากพจนานุกรมเป็นอาร์เรย์มีดังนี้


let airports = ["IST":"Istanbul Airport", "DUB":"Dublin Airport"]

let airportCodes = [String](airports.keys)
print(airportCodes)

let airportNames = [String](airports.values)
print(airportNames)

ขอแสดงความยินดี

ขอแสดงความยินดี 🎉

ในบทเรียนนี้ เราได้เรียนรู้วิธีใช้คอลเลกชันในสวิฟต์

พบกันในบทเรียนถัดไป

คอลเลกชัน — ภาพประกอบ 22

คำถามที่พบบ่อย

บทเรียน “คอลเลกชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คอลเลกชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 1 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คอลเลกชัน”

คอลเลกชัน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 1 บทเรียน

บทเรียน “คอลเลกชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

← กลับไปที่ Swift Academy