การวนผ่านและแก้ไขสไลซ์
อ่านและเขียนผ่านสไลซ์
การวนผ่านและแก้ไขสไลซ์ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
วนดูสมาชิกใน Slice
เมื่อมี slice อยู่ในมือแล้ว โดยทั่วไปคุณจะต้องการเยี่ยมชมสมาชิกทุกตัว ลูป for ของ Zig จะวนผ่าน slice ตั้งแต่ต้นจนจบได้อย่างสะดวก 🔁
for กับสมาชิก
ใส่ slice ไว้ในวงเล็บ แล้วตั้งชื่อสมาชิกแต่ละตัวด้วย capture ภายในเครื่องหมายเส้นตั้ง ลูปจะส่งค่าให้คุณทีละค่าต่อการวนหนึ่งรอบ
for (items) |value| {
// use value
}อ่านอย่างเดียวโดยค่าเริ่มต้น
การ capture แบบปกติจะให้สำเนาของสมาชิกแต่ละตัว การเปลี่ยนแปลงสำเนานั้นจะไม่กระทบข้อมูลเบื้องหลังของ slice
Capture ด้วยพอยน์เตอร์เพื่อแก้ไข
ใส่ * หน้า ชื่อ capture เพื่อรับพอยน์เตอร์แทนสำเนา จากนั้นการเขียนผ่านพอยน์เตอร์จะเปลี่ยนแปลงสมาชิกจริง
for (items) |*value| {
value.* += 1;
}เลิกอ้างอิงเพื่อเขียนค่า
เมื่อใช้ pointer capture ให้ใช้ .* เพื่อเข้าถึงค่าที่พอยน์เตอร์ชี้อยู่ รูปแบบนี้ทำให้ทั้งอ่านค่าและกำหนดค่าใหม่ได้
value.* = 0;Slice ต้องแก้ไขได้
หากต้องการเปลี่ยนสมาชิก ชนิดของ slice ต้องเป็น []T ธรรมดา ไม่ใช่ []const T เพราะ const slice ไม่อนุญาตให้เขียนผ่านมัน
วนลูปพร้อมดัชนี
จับคู่ slice กับช่วงเพื่อรับตัวนับไปพร้อมกัน capture ตัวที่สองหลังเครื่องหมายจุลภาคคือดัชนีปัจจุบัน
for (items, 0..) |value, i| {
// i is the index
}เข้าถึงด้วยดัชนีโดยตรง
คุณยังสามารถเขียนค่าไปยังช่องหนึ่งด้วยดัชนีโดยไม่ต้องใช้ loop capture ได้ กำหนดค่าผ่านวงเล็บเหลี่ยมเช่นเดียวกับอาร์เรย์
items[0] = 42;วนผ่านสอง Slice พร้อมกัน
ส่งหลาย slice ให้ลูป for เดียวเพื่อวนผ่านทั้งสองแบบไปพร้อมกันทีละตำแหน่ง slice เหล่านั้นต้องมีความยาวเท่ากัน มิฉะนั้นจะเกิด panic
for (xs, ys) |x, y| {
// x and y line up
}สะสมผลลัพธ์
เก็บผลรวมที่กำลังคำนวณไว้ใน var ซึ่งประกาศก่อนลูป แล้วอัปเดตในแต่ละรอบเพื่อคำนวณผลบวก
var total: i32 = 0;
for (items) |v| total += v;ข้ามด้วย continue
ภายในลูป continue จะข้ามไปยังสมาชิกถัดไปทันที ใช้เพื่อข้ามค่าที่ไม่ผ่านการทดสอบอย่างรวดเร็ว
for (items) |v| {
if (v < 0) continue;
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณต้องการคูณสมาชิกทุกตัวของ slice ชนิด []i32 ด้วย 2 โดยแก้ไขค่าในตำแหน่งเดิม รูปแบบ capture ใดที่ทำให้เขียนค่ากลับได้
สรุปทบทวน
วนลูปผ่าน slice ด้วย for: capture ปกติจะอ่านสำเนา ส่วน |*value| ร่วมกับ .* จะแก้ไขค่าในตำแหน่งเดิม และการเพิ่มช่วงจะช่วยติดตามดัชนี 🎯
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การวนผ่านและแก้ไขสไลซ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การวนผ่านและแก้ไขสไลซ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การวนผ่านและแก้ไขสไลซ์”
อ่านและเขียนผ่านสไลซ์ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การวนผ่านและแก้ไขสไลซ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อาร์เรย์ขนาดคงที่
- สไลซ์: พอยน์เตอร์บวกความยาว
- การตัดสไลซ์ด้วย array[start..end]
- การวนผ่านและแก้ไขสไลซ์