flatMap และการเชื่อมต่อ
คลี่คอลเลกชันที่ซ้อนกันและเชื่อมการแปลงเข้าด้วยกัน
flatMap และการเชื่อมต่อ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
flatMap สองรูปแบบ
flatMap ที่ใช้กับลำดับจะแผ่โครงสร้างซ้อนกันออกหนึ่งระดับ โดยใช้คลอเชอร์ที่คืนค่าลำดับสำหรับสมาชิกแต่ละตัว แล้วนำลำดับทั้งหมดมาต่อกันเป็นอาร์เรย์แบนหนึ่งชุด
การแผ่อาร์เรย์ซ้อนกัน
เปลี่ยนอาร์เรย์ของอาร์เรย์ให้เป็นอาร์เรย์เดียว:
let nested = [[1, 2], [3, 4], [5]]
let flat = nested.flatMap { $0 }
print(flat) // [1, 2, 3, 4, 5]flatMap ที่สร้างลำดับ
สมาชิกแต่ละตัวสามารถขยายออกเป็นหลายรายการได้:
let nums = [1, 2, 3]
let expanded = nums.flatMap { [$0, $0 * 10] }
print(expanded) // [1, 10, 2, 20, 3, 30]การจับคู่ทุกชุดที่เป็นไปได้
flatMap มีประโยชน์สำหรับการสร้างผลคูณคาร์ทีเซียน:
let suits = ["Hearts", "Spades"]
let ranks = ["A", "K"]
let deck = suits.flatMap { suit in ranks.map { "\($0) of \(suit)" } }
print(deck) // ["A of Hearts", "K of Hearts", "A of Spades", "K of Spades"]flatMap กับ compactMap
ในอดีต flatMap ยังใช้แกะออปชันนัลด้วย แต่หน้าที่ดังกล่าวย้ายมาอยู่ที่ compactMap แล้ว ปัจจุบัน:
flatMap— แผ่ลำดับที่ซ้อนกันcompactMap— นำnilออกจากผลลัพธ์แบบออปชันนัล
การแผ่คำเป็นอักขระ
ขยายสตริงแต่ละตัวออกเป็นอักขระ:
let words = ["hi", "yo"]
let chars = words.flatMap { Array($0) }
print(chars) // ["h", "i", "y", "o"]การรวมผลลัพธ์ย่อย
รวบรวมรายการจากออบเจ็กต์แบบจำลองที่ซ้อนกัน:
struct Team { let members: [String] }
let teams = [Team(members: ["Ann", "Bo"]), Team(members: ["Cy"])]
let all = teams.flatMap { $0.members }
print(all) // ["Ann", "Bo", "Cy"]การต่อการแปลงเข้าด้วยกัน
พลังที่แท้จริงเกิดจากการต่อการทำงานเข้าด้วยกัน: map, filter, flatMap และ reduce จะอ่านจากบนลงล่างเป็นสายการประมวลผลข้อมูล แต่ละขั้นตอนสร้างลำดับใหม่ให้ขั้นตอนถัดไป
สายการประมวลผลแบบครบวงจร
กรองข้อมูล แผ่โครงสร้าง แปลงข้อมูล แล้วหาผลรวม:
let groups = [[1, 2, 3], [4, 5], [6]]
let result = groups
.flatMap { $0 }
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
.reduce(0, +)
print(result) // 4 + 16 + 36 = 56flatMap แล้วจึง compactMap
แผ่โครงสร้างก่อน แล้วเก็บไว้เฉพาะค่าที่แยกวิเคราะห์ได้:
let rows = [["1", "x"], ["3", "4"]]
let nums = rows
.flatMap { $0 }
.compactMap { Int($0) }
print(nums) // [1, 3, 4]การทำให้สายการทำงานอ่านง่าย
วางแต่ละขั้นตอนไว้คนละบรรทัด และตั้งชื่อผลลัพธ์ระหว่างทางเมื่อสายการทำงานยาวขึ้น ความอ่านง่ายสำคัญกว่าการบีบทุกอย่างไว้ในนิพจน์เดียว
let names = ["ann", "BO", "cy"]
let titled = names
.map { $0.lowercased() }
.map { $0.capitalized }
.sorted()
print(titled) // ["Ann", "Bo", "Cy"]ตรวจสอบความเข้าใจอย่างรวดเร็ว
[[1, 2], [3]].flatMap { $0 } คืนค่าอะไร
สรุป
คุณได้เรียนรู้การแผ่โครงสร้างและการต่อการทำงานแล้ว:
flatMapแผ่ลำดับที่ซ้อนกันออกหนึ่งระดับ- ใช้
compactMap(ไม่ใช่ flatMap) เพื่อนำออปชันนัลออก - ต่อ
filter/map/flatMap/reduceเป็นสายการประมวลผลที่อ่านง่าย - การวางหนึ่งขั้นตอนต่อหนึ่งบรรทัดช่วยให้สายการทำงานยาว ๆ อ่านได้ชัดเจน
จบหลักสูตรแล้ว! ถัดไป: ลำดับแบบเลื่อนการประเมิน
คำถามที่พบบ่อย
บทเรียน “flatMap และการเชื่อมต่อ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “flatMap และการเชื่อมต่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “flatMap และการเชื่อมต่อ”
คลี่คอลเลกชันที่ซ้อนกันและเชื่อมการแปลงเข้าด้วยกัน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “flatMap และการเชื่อมต่อ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- map และ compactMap
- filter และเพรดิเคต
- reduce และ reduce(into:)
- flatMap และการเชื่อมต่อ