Solidity - Mảng
Mảng là một cấu trúc dữ liệu, nó lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Mảng được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng như một tập hợp các biến cùng kiểu.
Thay vì khai báo các biến riêng lẻ, chẳng hạn như number0, number1, ... và number99, bạn khai báo một biến mảng chẳng hạn như số và sử dụng số [0], số [1] và ..., số [99] để biểu diễn các biến riêng lẻ. Một phần tử cụ thể trong một mảng được truy cập bởi một chỉ mục.
Trong Solidity, một mảng có thể có kích thước cố định theo thời gian biên dịch hoặc kích thước động. Đối với mảng lưu trữ, nó cũng có thể có nhiều loại phần tử khác nhau. Trong trường hợp mảng bộ nhớ, kiểu phần tử không thể được ánh xạ và trong trường hợp nó được sử dụng làm tham số hàm thì kiểu phần tử phải là kiểu ABI.
Tất cả các mảng bao gồm các vị trí bộ nhớ liền kề. Địa chỉ thấp nhất tương ứng với phần tử đầu tiên và địa chỉ cao nhất cho phần tử cuối cùng.
Khai báo Mảng
Để khai báo một mảng có kích thước cố định trong Solidity, lập trình viên chỉ định kiểu của các phần tử và số phần tử theo yêu cầu của một mảng như sau:
type arrayName [ arraySize ];
Đây được gọi là mảng một chiều. CácarraySize phải là một hằng số nguyên lớn hơn 0 và typecó thể là bất kỳ kiểu dữ liệu Solidity hợp lệ nào. Ví dụ, để khai báo một mảng 10 phần tử được gọi là số dư kiểu uint, hãy sử dụng câu lệnh này:
uint balance[10];
Để khai báo một mảng có kích thước động trong Solidity, lập trình viên chỉ định kiểu của các phần tử như sau:
type[] arrayName;
Khởi tạo Mảng
Bạn có thể khởi tạo từng phần tử mảng Solidity hoặc sử dụng một câu lệnh đơn như sau:
uint balance[3] = [1, 2, 3];
Số lượng giá trị giữa dấu ngoặc [] không được lớn hơn số phần tử mà chúng ta khai báo cho mảng giữa dấu ngoặc vuông []. Sau đây là một ví dụ để gán một phần tử duy nhất của mảng:
Nếu bạn bỏ qua kích thước của mảng, một mảng vừa đủ lớn để chứa quá trình khởi tạo sẽ được tạo. Do đó, nếu bạn viết -
uint balance[] = [1, 2, 3];
Bạn sẽ tạo chính xác mảng giống như bạn đã làm trong ví dụ trước.
balance[2] = 5;
Các chuyển nhượng tuyên bố số lượng phần tử 3 trên thứ trong mảng giá trị 5.
Tạo mảng bộ nhớ động
Mảng bộ nhớ động được tạo bằng từ khóa mới.
uint size = 3;
uint balance[] = new uint[](size);
Truy cập các phần tử mảng
Một phần tử được truy cập bằng cách lập chỉ mục tên mảng. Điều này được thực hiện bằng cách đặt chỉ số của phần tử trong dấu ngoặc vuông sau tên của mảng. Ví dụ -
uint salary = balance[2];
Câu lệnh trên sẽ lấy phần tử thứ 3 từ mảng và gán giá trị cho biến lương. Sau đây là một ví dụ, sẽ sử dụng tất cả ba khái niệm được đề cập ở trên viz. khai báo, gán và truy cập mảng -
Các thành viên
length- length trả về kích thước của mảng. chiều dài có thể được sử dụng để thay đổi kích thước của mảng động được thiết lập nó.
push- push cho phép nối một phần tử vào một mảng lưu trữ động ở cuối. Nó trả về độ dài mới của mảng.
Thí dụ
Hãy thử đoạn mã sau để hiểu cách các mảng hoạt động trong 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);
}
}