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);
}
}