map และ compactMap
แปลงสมาชิกและตัดค่า nil ออก
map และ compactMap เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
map คืออะไร
map เป็นฟังก์ชันลำดับสูงที่รับคลอเชอร์และนำไปใช้กับสมาชิกทุกตัวของลำดับ จากนั้นคืนค่าอาร์เรย์ใหม่ที่มีผลลัพธ์จากการแปลง
- คอลเลกชันเดิมจะไม่ถูกเปลี่ยนแปลง
- จำนวนผลลัพธ์จะเท่ากับจำนวนข้อมูลเข้าเสมอ
- ชนิดของสมาชิกสามารถเปลี่ยนได้ เช่น
Int→String
การใช้ map อย่างง่าย
การเพิ่มค่าของตัวเลขทุกตัวในอาร์เรย์เป็นสองเท่า:
let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8]การเปลี่ยนชนิดของสมาชิก
map สามารถแปลงค่า Int เป็นค่า String ได้:
let ids = [10, 20, 30]
let labels = ids.map { "ID-\($0)" }
print(labels) // ["ID-10", "ID-20", "ID-30"]การใช้ map กับฟังก์ชันที่ตั้งชื่อ
คุณสามารถส่งฟังก์ชันใดก็ได้ที่มีลายเซ็นตรงกัน ไม่จำเป็นต้องใช้เพียงคลอเชอร์ต่อท้าย:
let words = ["swift", "map"]
let upper = words.map { $0.uppercased() }
print(upper) // ["SWIFT", "MAP"]ปัญหาที่ map แก้ไม่ได้
map จะเก็บสมาชิกทุกตัวไว้ หากการแปลงของคุณคืนค่าแบบออปชันนัล (ซึ่งอาจล้มเหลวได้) คุณจะได้อาร์เรย์ของออปชันนัล เช่น [Int?] ซึ่งเต็มไปด้วยช่อง nil ที่ต้องกรองภายหลัง
และนี่คือสิ่งที่ compactMap แก้ไขได้
เข้าสู่ compactMap
compactMap จะแปลงสมาชิกแต่ละตัวและนำผลลัพธ์ที่เป็น nil ออก จากนั้นคืนค่าอาร์เรย์ที่ไม่มีออปชันนัล:
let raw = ["1", "2", "x", "4"]
let nums = raw.compactMap { Int($0) }
print(nums) // [1, 2, 4] -- "x" was droppedเปรียบเทียบ map กับ compactMap
ความแตกต่างอยู่ที่ว่าผลลัพธ์ที่เป็น nil จะยังคงอยู่หรือไม่:
let raw = ["1", "x", "3"]
print(raw.map { Int($0) }) // [Optional(1), nil, Optional(3)]
print(raw.compactMap { Int($0) }) // [1, 3]การแกะออปชันนัลในคอลเลกชัน
compactMap เป็นวิธีตามสำนวนของภาษาในการนำค่า nil ออกจากอาร์เรย์ของออปชันนัล:
let maybe: [Int?] = [1, nil, 3, nil, 5]
let clean = maybe.compactMap { $0 }
print(clean) // [1, 3, 5]การแยกวิเคราะห์ด้วย compactMap
การใช้งานจริงที่พบบ่อยคือ แยกวิเคราะห์เฉพาะบรรทัดข้อมูลเข้าที่ถูกต้อง:
let lines = ["42", "", "hello", "7"]
let values = lines.compactMap { Int($0) }
print(values) // [42, 7]
print(values.reduce(0, +)) // 49การใช้ map และ compactMap ร่วมกัน
คุณสามารถต่อการทำงานเข้าด้วยกันได้ โดยใช้ map เพื่อจัดรูปข้อมูล และใช้ compactMap เพื่อเก็บไว้เฉพาะรายการที่สำเร็จ:
let scores = ["90", "85", "n/a", "70"]
let passed = scores
.compactMap { Int($0) }
.map { $0 >= 80 ? "pass" : "fail" }
print(passed) // ["pass", "pass", "fail"]compactMap กับสายโซ่ออปชันนัล
นอกจากนี้ยังทำงานร่วมกับการเข้าถึงคุณสมบัติแบบออปชันนัลได้เป็นอย่างดี:
struct User { let name: String? }
let users = [User(name: "Ann"), User(name: nil), User(name: "Bo")]
let names = users.compactMap { $0.name }
print(names) // ["Ann", "Bo"]ตรวจสอบความเข้าใจอย่างรวดเร็ว
ฟังก์ชันใดแปลงสมาชิกและนำผลลัพธ์ที่เป็น nil ออกได้ในขั้นตอนเดียว
สรุป
คุณได้เรียนรู้ฟังก์ชันหลักสำหรับการแปลงสองฟังก์ชัน:
map— แปลงสมาชิกทุกตัว โดยจำนวนผลลัพธ์เท่ากับจำนวนข้อมูลเข้าcompactMap— แปลงข้อมูลและนำnilออก เหมาะสำหรับการแยกวิเคราะห์และการแกะออปชันนัล- ทั้งสองฟังก์ชันคืนค่าอาร์เรย์ใหม่และไม่เปลี่ยนแปลงแหล่งข้อมูล
- ต่อฟังก์ชันทั้งสองเข้าด้วยกันเพื่อจัดรูปและกรองข้อมูลอย่างเป็นระเบียบ
ถัดไป: การกรองด้วยเพรดิเคต
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “map และ compactMap” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “map และ compactMap” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “map และ compactMap”
แปลงสมาชิกและตัดค่า nil ออก คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “map และ compactMap” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- map และ compactMap
- filter และเพรดิเคต
- reduce และ reduce(into:)
- flatMap และการเชื่อมต่อ