คอลเลกชัน
คอลเลกชัน
คอลเลกชัน เป็นบทเรียน 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)ขอแสดงความยินดี
ขอแสดงความยินดี 🎉
ในบทเรียนนี้ เราได้เรียนรู้วิธีใช้คอลเลกชันในสวิฟต์
พบกันในบทเรียนถัดไป

คำถามที่พบบ่อย
บทเรียน “คอลเลกชัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คอลเลกชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ