filter และเพรดิเคต
เลือกสมาชิกที่ตรงตามเงื่อนไข
filter และเพรดิเคต เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
filter คืออะไร
filter จะเก็บไว้เฉพาะสมาชิกที่คลอเชอร์ (หรือเพรดิเคต) คืนค่าเป็น true
- คลอเชอร์จะคืนค่าเป็น
Bool - ชนิดของสมาชิกยังคงเดิม
- ผลลัพธ์เป็นอาร์เรย์ใหม่ ซึ่งอาจมีขนาดเล็กลง
การใช้ filter อย่างง่าย
เก็บไว้เฉพาะตัวเลขคู่:
let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]การกรองสตริง
เก็บไว้เฉพาะคำที่ยาวเกินสามอักขระ:
let words = ["hi", "swift", "go", "filter"]
let long = words.filter { $0.count > 3 }
print(long) // ["swift", "filter"]เพรดิเคตคืออะไร
เพรดิเคต คือฟังก์ชันที่รับค่าและคืนค่าเป็น Bool อย่างง่าย ๆ filter จะเรียกใช้เพรดิเคตของคุณหนึ่งครั้งต่อสมาชิกแต่ละตัว และเก็บค่านั้นไว้เมื่อเพรดิเคตคืนค่าเป็น true
การตั้งชื่อเพรดิเคต
คุณสามารถจัดเก็บและนำเพรดิเคตกลับมาใช้ใหม่เพื่อให้อ่านโค้ดได้ง่ายขึ้น:
let isPositive: (Int) -> Bool = { $0 > 0 }
let data = [-2, 5, -1, 8]
print(data.filter(isPositive)) // [5, 8]การรวมเงื่อนไข
ใช้ตัวดำเนินการบูลีนภายในเพรดิเคต:
let nums = [1, 2, 3, 4, 5, 6, 7, 8]
let picked = nums.filter { $0 % 2 == 0 && $0 > 4 }
print(picked) // [6, 8]การกรองโครงสร้างข้อมูล
กรองคอลเลกชันของออบเจ็กต์แบบจำลองตามคุณสมบัติ:
struct Product { let name: String; let price: Int }
let items = [Product(name: "Pen", price: 2), Product(name: "Bag", price: 40)]
let cheap = items.filter { $0.price < 10 }
print(cheap.map { $0.name }) // ["Pen"]filter กับ map
ทั้งสองฟังก์ชันตอบคำถามคนละอย่าง: filter เลือกว่าสมาชิกใดจะคงอยู่ ส่วน map เปลี่ยนสมาชิกแต่ละตัว ชนิดของผลลัพธ์จึงแตกต่างกัน:
let n = [1, 2, 3, 4]
print(n.filter { $0 > 2 }) // [3, 4] (subset, same type)
print(n.map { $0 > 2 }) // [false, false, true, true]การต่อ filter และ map
กรองข้อมูลก่อนเพื่อลดปริมาณงาน แล้วจึงแปลงข้อมูล:
let nums = [1, 2, 3, 4, 5, 6]
let result = nums
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
print(result) // [4, 16, 36]การนับโดยไม่เก็บผลลัพธ์
หากคุณต้องการเพียงจำนวน filter(...).count ก็ใช้งานได้ แต่ count(where:) จะหลีกเลี่ยงการสร้างอาร์เรย์:
let votes = [true, false, true, true]
let yes = votes.filter { $0 }.count
print(yes) // 3การกรองพจนานุกรม
การใช้ filter กับพจนานุกรมจะได้พจนานุกรมที่ประกอบด้วยคู่คีย์/ค่าที่ตรงเงื่อนไข:
let ages = ["Ann": 30, "Bo": 17, "Cy": 22]
let adults = ages.filter { $0.value >= 18 }
print(adults.keys.sorted()) // ["Ann", "Cy"]ตรวจสอบความเข้าใจอย่างรวดเร็ว
เพรดิเคตของ filter ต้องคืนค่าเป็นอะไร
สรุป
คุณได้เรียนรู้การกรองแล้ว:
filterจะเก็บสมาชิกที่เพรดิเคตคืนค่าเป็นtrue- เพรดิเคต คือฟังก์ชันใด ๆ ที่แปลงค่าหนึ่งค่าเป็น
Bool - ชนิดของสมาชิกยังคงเดิม แต่อาร์เรย์อาจมีขนาดเล็กลง
- รวมเงื่อนไขด้วย
&&/||และต่อการทำงานกับmapได้
ถัดไป: reduce
คำถามที่พบบ่อย
บทเรียน “filter และเพรดิเคต” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “filter และเพรดิเคต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “filter และเพรดิเคต”
เลือกสมาชิกที่ตรงตามเงื่อนไข คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “filter และเพรดิเคต” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- map และ compactMap
- filter และเพรดิเคต
- reduce และ reduce(into:)
- flatMap และการเชื่อมต่อ