Tag: iterator

13 รายการ

Blog

กระรอกดินต้นฉบับค่อย ๆ ดึงชิ้นข้อมูลจากริบบิ้นไบต์ผ่านช่องคัดทีละชิ้น
gobytesiterator

Go bytes.FieldsSeq: อ่าน token ทีละชิ้นโดยไม่สร้าง slice ก้อนใหญ่

ใช้ bytes.FieldsSeq เดินข้อมูลไบต์แบบ lazy หยุดได้ทันทีเมื่อได้ field ครบ พร้อม Go test ตรวจ whitespace และ early stop

พี่โชว์
ปูต้นฉบับเรียงกล่องสีเขียวบนทางลาดจากเตี้ยไปสูงและหยุดที่กล่องอำพันซึ่งวางผิดลำดับ
rustiteratorvalidation

Rust Iterator::is_sorted_by_key: ตรวจลำดับโดยไม่สร้าง Vec สำรอง

ตรวจ stream ว่าเรียงตาม priority หรือไม่ด้วย is_sorted_by_key พร้อม Cargo test และข้อควรระวังเรื่อง key

พี่โชว์
กระรอกดินต้นฉบับรับเมล็ดทีละเมล็ดจากสายพานและหยุดเมื่อเต็มตะกร้า
gostringsiterator

Go strings.FieldsFuncSeq: แยก token แบบ iterator ไม่ต้องสร้าง slice ทั้งก้อน

ใช้ FieldsFuncSeq เดิน token ทีละค่า หยุดได้เร็ว และคัดลอกเฉพาะข้อมูลที่ต้องเก็บ พร้อม Go test

พี่โชว์
กระรอกดินต้นฉบับกำลังจับคู่เมล็ดกับช่องเก็บสีต่างกันบนโต๊ะสว่าง
gogolangmaps

Go maps.Collect: สร้าง map จาก iterator คู่ key-value

ใช้ maps.Collect รับ iter.Seq2 เป็น map พร้อมทดสอบ duplicate key, empty input และแยก collection จาก validation

พี่โชว์
กระรอกดินต้นฉบับกำลังส่งเมล็ดจากสายพานทีละเมล็ดลงตะกร้าที่มีของอยู่แล้ว
gogolangslices

Go slices.AppendSeq: เติม iterator ลง slice โดยไม่ต้องเขียนลูปเอง

ใช้ slices.AppendSeq ต่อค่าจาก iter.Seq ลง slice ที่มีอยู่ พร้อมทดสอบ capacity, iterator แบบใช้ครั้งเดียว และ ownership ของข้อมูล

พี่โชว์
อิกัวนาต้นฉบับดึงถาดชิ้นส่วนจากปลายขวาของรางย้อนกลับทีละช่องบนโต๊ะมิ้นต์
zigmemoryiterator

Zig splitBackwardsSequence: แยก path จากด้านท้ายโดยไม่ reverse ข้อมูล

ใช้ std.mem.splitBackwardsSequence ดึงชื่อไฟล์และโฟลเดอร์จากท้าย slice พร้อมรู้ empty field, delimiter หลายไบต์ และ lifetime

พี่โชว์
กระรอกดินต้นฉบับค่อย ๆ ดึงแถบกระดาษที่แบ่งเป็นท่อนโดยเก็บหมุดคั่นไว้ปลายแต่ละท่อน
gogolangstrings

Go strings.SplitAfterSeq: แบ่งข้อความแบบ iterator โดยเก็บตัวคั่นไว้

ใช้ SplitAfterSeq อ่าน record ทีละส่วนโดยไม่สร้าง slice ทั้งก้อน พร้อมทดสอบ empty separator, single-use iterator และ ownership ของ substring

พี่โชว์
ปูต้นฉบับคีบลูกปัดที่ผ่านเงื่อนไขออกจากช่วงกลางของรางโดยเก็บลูกอื่นไว้
rustveciterator

Rust Vec::extract_if: ดึงสมาชิกออกเฉพาะช่วงโดยยังเก็บลำดับที่เหลือ

ใช้ Vec::extract_if แยกสมาชิกที่ผ่านเงื่อนไขจาก range พร้อมเข้าใจ lazy iterator, early drop และต้นทุนการเลื่อนข้อมูล

พี่โชว์
ปูสีส้มแดงต้นฉบับหยุดสายพานสะสมทันทีเมื่อพบชิ้นงานสีอำพันแตกร้าว
rustiteratortry-fold

Rust try_fold: สะสมค่าแล้วหยุดทันทีเมื่อเจอเงื่อนไขผิด

ใช้ Iterator::try_fold รวมข้อมูลพร้อมส่ง error ออกจากลูปเร็ว โดยไม่ต้องเขียน mutable accumulator เอง

พี่โชว์
ปูสีส้มแดงต้นฉบับกำลังวางก้อนกรวดสีเดียวกันเป็นช่วงติดกันบนโต๊ะทำงานสีมิ้นต์
rustsliceiterator

Rust slice::chunk_by: แบ่งข้อมูลติดกันตามกติกาโดยไม่ copy

ใช้ chunk_by มอง slice เป็นช่วงต่อเนื่องตาม predicate พร้อมทดสอบ empty input, ศูนย์ และเส้นแบ่งกลุ่ม

พี่โชว์
อิกัวนาตัวเล็กต้นฉบับเลื่อนกรอบสีอำพันครอบก้อนข้อมูลสีเขียวทีละช่วงโดยไม่ยกก้อนออกจากราง
zigslicesiterator

Zig std.mem.window: ทำ Sliding Window โดยคืน Slice ไม่คัดลอกข้อมูล

ใช้ std.mem.window สร้าง moving window, chunk และ sampling พร้อมระวัง tail slice กับ size/advance ที่ห้ามเป็นศูนย์

พี่โชว์
กระรอกดินต้นฉบับแบ่งเมล็ดบนสายพานเป็นถาดละสามเม็ด โดยขอบถาดป้องกันไม่ให้ไหลปนกัน
goslicesiterator

Go slices.Chunk: แบ่ง batch โดยไม่เปิดช่องให้ append ทับข้อมูลข้างเคียง

ใช้ slices.Chunk เดินข้อมูลเป็น batch แบบ iterator พร้อมเข้าใจ clipped capacity และขอบเขตของ slice ที่แชร์ backing array

พี่โชว์
ปูต้นฉบับคัดเมล็ดสีเขียวจากสายพานจนถึงเมล็ดอำพันที่เป็นเส้นหยุด
rustiteratorparsing

Rust map_while: แปลงข้อมูลจนเจอเส้นแบ่ง แล้วหยุดอย่างมีขอบเขต

ใช้ Iterator::map_while อ่าน prefix ที่แปลงได้ พร้อมอธิบายว่า item ที่ทำให้หยุดถูก consume และ iterator ไม่ fused

พี่โชว์