Solidity - อาร์เรย์

Array คือโครงสร้างข้อมูลที่จัดเก็บคอลเลกชันตามลำดับที่มีขนาดคงที่ขององค์ประกอบประเภทเดียวกัน อาร์เรย์ใช้ในการจัดเก็บชุดข้อมูล แต่มักจะมีประโยชน์มากกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน

แทนที่จะประกาศตัวแปรเดี่ยวเช่น number0, number1, ... และ number99 คุณจะประกาศตัวแปรอาร์เรย์หนึ่งตัวเช่นตัวเลขและใช้ตัวเลข [0], ตัวเลข [1] และ ... , ตัวเลข [99] เพื่อแสดง ตัวแปรแต่ละตัว องค์ประกอบเฉพาะในอาร์เรย์ถูกเข้าถึงโดยดัชนี

ใน Solidity อาร์เรย์อาจมีขนาดคงที่ของเวลาคอมไพล์หรือขนาดไดนามิก สำหรับอาร์เรย์พื้นที่เก็บข้อมูลสามารถมีองค์ประกอบประเภทต่างๆได้เช่นกัน ในกรณีของอาร์เรย์หน่วยความจำประเภทองค์ประกอบไม่สามารถทำการแม็ปได้และในกรณีที่จะใช้เป็นพารามิเตอร์ฟังก์ชันประเภทองค์ประกอบควรเป็นประเภท ABI

อาร์เรย์ทั้งหมดประกอบด้วยตำแหน่งหน่วยความจำที่อยู่ติดกัน ที่อยู่ต่ำสุดสอดคล้องกับองค์ประกอบแรกและที่อยู่สูงสุดขององค์ประกอบสุดท้าย

การประกาศอาร์เรย์

ในการประกาศอาร์เรย์ที่มีขนาดคงที่ใน Solidity โปรแกรมเมอร์จะระบุประเภทขององค์ประกอบและจำนวนองค์ประกอบที่อาร์เรย์ต้องการดังนี้ -

type arrayName [ arraySize ];

สิ่งนี้เรียกว่าอาร์เรย์มิติเดียว arraySize ต้องเป็นค่าคงที่จำนวนเต็มมากกว่าศูนย์และ typeสามารถเป็นชนิดข้อมูล Solidity ที่ถูกต้องได้ ตัวอย่างเช่นในการประกาศอาร์เรย์ 10 องค์ประกอบที่เรียกว่า balance of type uint ให้ใช้คำสั่งนี้ -

uint balance[10];

ในการประกาศอาร์เรย์ของขนาดไดนามิกใน Solidity โปรแกรมเมอร์ระบุประเภทขององค์ประกอบดังต่อไปนี้ -

type[] arrayName;

การเริ่มต้นอาร์เรย์

คุณสามารถเริ่มต้นองค์ประกอบ Solidity array ทีละรายการหรือใช้คำสั่งเดียวดังนี้ -

uint balance[3] = [1, 2, 3];

จำนวนค่าระหว่างวงเล็บปีกกา [] ต้องไม่เกินจำนวนองค์ประกอบที่เราประกาศสำหรับอาร์เรย์ระหว่างวงเล็บเหลี่ยม [] ต่อไปนี้เป็นตัวอย่างในการกำหนดองค์ประกอบเดียวของอาร์เรย์ -

หากคุณละเว้นขนาดของอาร์เรย์อาร์เรย์ที่ใหญ่พอที่จะรองรับการเริ่มต้นจะถูกสร้างขึ้น ดังนั้นถ้าคุณเขียน -

uint balance[] = [1, 2, 3];

คุณจะสร้างอาร์เรย์เหมือนกับที่คุณทำในตัวอย่างก่อนหน้านี้

balance[2] = 5;

คำสั่งข้างต้นกำหนดองค์ประกอบหมายเลข 3 rdในอาร์เรย์เป็นค่า 5

การสร้างอาร์เรย์หน่วยความจำแบบไดนามิก

อาร์เรย์หน่วยความจำแบบไดนามิกถูกสร้างขึ้นโดยใช้คีย์เวิร์ดใหม่

uint size = 3;
uint balance[] = new uint[](size);

การเข้าถึงองค์ประกอบอาร์เรย์

องค์ประกอบถูกเข้าถึงโดยการสร้างดัชนีชื่ออาร์เรย์ ทำได้โดยการวางดัชนีขององค์ประกอบไว้ในวงเล็บเหลี่ยมหลังชื่อของอาร์เรย์ ตัวอย่างเช่น -

uint salary = balance[2];

ข้อความข้างต้นจะใช้องค์ประกอบ3 rdจากอาร์เรย์และกำหนดค่าให้กับตัวแปรเงินเดือน ต่อไปนี้เป็นตัวอย่างซึ่งจะใช้แนวคิดทั้งสามที่กล่าวถึงข้างต้น ได้แก่ การประกาศการมอบหมายและการเข้าถึงอาร์เรย์ -

สมาชิก

  • length- ความยาวส่งกลับขนาดของอาร์เรย์ ความยาวสามารถใช้เพื่อเปลี่ยนขนาดของอาร์เรย์แบบไดนามิกที่ตั้งค่าได้

  • push- push อนุญาตให้ผนวกองค์ประกอบเข้ากับอาร์เรย์จัดเก็บข้อมูลแบบไดนามิกในตอนท้าย จะส่งกลับความยาวใหม่ของอาร์เรย์

ตัวอย่าง

ลองใช้รหัสต่อไปนี้เพื่อทำความเข้าใจว่าอาร์เรย์ทำงานอย่างไรใน Solidity

pragma solidity ^0.5.0;

contract test {
   function testArray() public pure{
      uint len = 7; 
      
      //dynamic array
      uint[] memory a = new uint[](7);
      
      //bytes is same as byte[]
      bytes memory b = new bytes(len);
      
      assert(a.length == 7);
      assert(b.length == len);
      
      //access array variable
      a[6] = 8;
      
      //test array variable
      assert(a[6] == 8);
      
      //static array
      uint[3] memory c = [uint(1) , 2, 3];
      assert(c.length == 3);
   }
}