Zig Academy · บทเรียน

การวนผ่านและแก้ไขสไลซ์

อ่านและเขียนผ่านสไลซ์

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

การวนผ่านและแก้ไขสไลซ์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. อาร์เรย์ขนาดคงที่
  2. สไลซ์: พอยน์เตอร์บวกความยาว
  3. การตัดสไลซ์ด้วย array[start..end]
  4. การวนผ่านและแก้ไขสไลซ์
← กลับไปที่ Zig Academy