แชร์ผ่าน


BinaryFormat.Group

ไวยากรณ์

BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function

เกี่ยวกับ

พารามิเตอร์มีดังนี้:

  • พารามิเตอร์ binaryFormat ระบุรูปแบบไบนารีของค่าคีย์
  • พารามิเตอร์ group ให้ข้อมูลเกี่ยวกับกลุ่มของหน่วยข้อมูลที่รู้จัก
  • พารามิเตอร์ ที่เลือกได้ extra สามารถใช้เพื่อระบุฟังก์ชันที่จะแสดงค่ารูปแบบไบนารีสําหรับค่าดังกล่าวตามคีย์ใด ๆ ที่ไม่คาดคิด extraหากไม่ได้ระบุพารามิเตอร์ ระบบจะแสดงข้อผิดพลาด หากมีค่าคีย์ที่ไม่คาดคิดเกิดขึ้น

พารามิเตอร์ group ระบุรายการของข้อกําหนดหน่วยข้อมูล แต่ละข้อกําหนดของหน่วยข้อมูลคือรายการที่มี 3-5 ค่าดังนี้:

  • ค่าคีย์ ค่าของคีย์ที่สอดคล้องกับหน่วยข้อมูล การดําเนินการนี้ต้องไม่ซ้ํากันภายในชุดของหน่วยข้อมูล
  • รูปแบบหน่วยข้อมูล รูปแบบไบนารีที่สอดคล้องกับค่าของหน่วยข้อมูล ซึ่งช่วยให้หน่วยข้อมูลแต่ละรายการมีรูปแบบที่แตกต่างกัน
  • การปรากฏของหน่วยข้อมูล ค่า BinaryOccurrence.Type สําหรับจํานวนครั้งที่คาดหวังว่ารายการจะปรากฏในกลุ่ม หน่วยข้อมูลที่จําเป็นที่ไม่มีข้อผิดพลาดเกิดขึ้น หน่วยข้อมูลที่ซ้ํากันที่จําเป็นหรือเป็นทางเลือกจะได้รับการจัดการเช่นเดียวกับค่าคีย์ที่ไม่คาดคิด
  • ค่าหน่วยข้อมูลเริ่มต้น (ไม่บังคับ) หากค่าหน่วยข้อมูลเริ่มต้นปรากฏในรายการข้อกําหนดหน่วยข้อมูลและไม่ใช่ค่า null ค่านี้จะถูกใช้แทนค่าเริ่มต้น ค่าเริ่มต้นสําหรับการทําซ้ําหรือหน่วยข้อมูลที่เลือกได้เป็น null และค่าเริ่มต้นสําหรับค่าที่ซ้ํากันคือรายการที่ว่างเปล่า { }
  • การแปลงข้อมูลค่าหน่วยข้อมูล (ทางเลือก) หากฟังก์ชันการแปลงข้อมูลค่าหน่วยข้อมูลปรากฏอยู่ในรายการข้อกําหนดของหน่วยข้อมูลและไม่ใช่ค่า null ค่านี้จะถูกเรียกเพื่อแปลงข้อมูลค่าหน่วยข้อมูลก่อนที่จะถูกส่งกลับ ฟังก์ชันการแปลงข้อมูลจะถูกเรียกก็ต่อเมื่อหน่วยข้อมูลปรากฏในข้อมูลป้อนเข้า (จะไม่มีการเรียกใช้ด้วยค่าเริ่มต้น)

ตัวอย่างที่ 1

รายการต่อไปนี้จะถือว่าค่าคีย์ที่เป็นไบต์เดียว ซึ่งมีหน่วยข้อมูลที่คาดหวังจํานวน 4 รายการในกลุ่ม ซึ่งทั้งหมดนี้มีไบต์ของข้อมูลตามคีย์ หน่วยข้อมูลจะปรากฏในข้อมูลป้อนเข้าดังนี้:

  • จําเป็นต้องมีคีย์ 1 และจะปรากฏพร้อมกับค่า 11
  • คีย์ 2 ปรากฏซ้ําและปรากฏสองครั้งพร้อมกับค่า 22 และส่งผลให้มีค่า { 22, 22 }
  • คีย์ 3 เป็นรายการทางเลือกและไม่ปรากฏขึ้น และแสดงผลลัพธ์เป็นค่า null
  • คีย์ 4 ซ้ํากัน แต่ไม่ปรากฏขึ้น และส่งผลให้มีค่า { }
  • คีย์ 5 ไม่ใช่ส่วนหนึ่งของกลุ่ม แต่จะปรากฏขึ้นหนึ่งครั้งพร้อมกับค่า 55 ฟังก์ชันพิเศษถูกเรียกด้วยค่าคีย์ 5 และแสดงรูปแบบที่สอดคล้องกับค่านั้น (BinaryFormat.Byte) ค่า 55 จะถูกอ่านและละทิ้ง

การใช้งาน

let
    b = #binary({
        1, 11,
        2, 22,
        2, 22,
        5, 55,
        1, 11
    }),
    f = BinaryFormat.Group(
        BinaryFormat.Byte,
        {
            {1, BinaryFormat.Byte, BinaryOccurrence.Required},
            {2, BinaryFormat.Byte, BinaryOccurrence.Repeating},
            {3, BinaryFormat.Byte, BinaryOccurrence.Optional},
            {4, BinaryFormat.Byte, BinaryOccurrence.Repeating}
        },
        (extra) => BinaryFormat.Byte
    )
in
    f(b)

เอาท์พุท

{11, {22, 22}, null, {}}

ตัวอย่าง 2

ตัวอย่างต่อไปนี้แสดงการแปลงข้อมูลค่าหน่วยข้อมูลและค่าหน่วยข้อมูลเริ่มต้น หน่วยข้อมูลที่ซ้ํากันกับคีย์ 1 จะรวมรายการค่าที่อ่านโดยใช้ List.Sum หน่วยข้อมูลที่เลือกได้พร้อมกับคีย์ 2 มีค่าเริ่มต้นของ 123 แทนที่จะเป็น null

การใช้งาน

let
    b = #binary({
        1, 101,
        1, 102
    }),
    f = BinaryFormat.Group(
        BinaryFormat.Byte,
        {
            {1, BinaryFormat.Byte, BinaryOccurrence.Repeating,
              0, (list) => List.Sum(list)},
            {2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123}
        }
    )
in
    f(b)

เอาท์พุท

{203, 123}