Swift Academy · บทเรียน

map และ compactMap

แปลงสมาชิกและตัดค่า nil ออก

บทเรียน 1 จาก 413 ขั้นตอน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. map และ compactMap
  2. filter และเพรดิเคต
  3. reduce และ reduce(into:)
  4. flatMap และการเชื่อมต่อ
← กลับไปที่ Swift Academy