آرایه (Array) می تواند یک اندازه ثابت در زمان کامپایل و یا اندازه پویا داشته باشد.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Array {
// روش های مختلف تعریف و مقدار دهی آرایه
uint[] public arr;
uint[] public arr2 = [1, 2, 3];
// آرایه با اندازه ثابت. تمام عناصر مقدار صفر دارند
uint[10] public myFixedSizeArr;
function get(uint i) public view returns (uint) {
return arr[i];
}
// سالیدیتی میتواند کل آرایه را برگرداند
// اما از این تابع نباید استفاده کرد
// چرا که طول آرایه میتواند نامحدود باشد
function getArr() public view returns (uint[] memory) {
return arr;
}
function push(uint i) public {
// اضافه کردن به آرایه
// یک واحد به آرایه اضافه می شود
arr.push(i);
}
function pop() public {
// آخرین عنصر از آرایه حذف می شود
// و طول آرایه یک عدد کم می شود
arr.pop();
}
function getLength() public view returns (uint) {
return arr.length;
}
function remove(uint index) public {
// اندازه آرایه را تغییر نمیدهد Delete
// مقدار عنصر مورد نظر را به عدد پیش فرض بر میگرداند
// که در اینجا صفر است
delete arr[index];
}
function examples() external {
// ساخت آرایه در حافظه، فقط با اندازه ثابت می تواند ساخته شود
uint[] memory a = new uint[](5);
}
}
Solidityمثالی از حذف عنصر آرایه #
حذف عنصر آرایه با جابجایی عناصر از راست به چپ
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ArrayRemoveByShifting {
// [1, 2, 3] -- remove(1) --> [1, 3, 3] --> [1, 3]
// [1, 2, 3, 4, 5, 6] -- remove(2) --> [1, 2, 4, 5, 6, 6] --> [1, 2, 4, 5, 6]
// [1, 2, 3, 4, 5, 6] -- remove(0) --> [2, 3, 4, 5, 6, 6] --> [2, 3, 4, 5, 6]
// [1] -- remove(0) --> [1] --> []
uint[] public arr;
function remove(uint _index) public {
require(_index < arr.length, "index out of bound");
for (uint i = _index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr.pop();
}
function test() external {
arr = [1, 2, 3, 4, 5];
remove(2);
// [1, 2, 4, 5]
assert(arr[0] == 1);
assert(arr[1] == 2);
assert(arr[2] == 4);
assert(arr[3] == 5);
assert(arr.length == 4);
arr = [1];
remove(0);
// []
assert(arr.length == 0);
}
}
Solidityحذف عنصر آرایه با کپی کردن آخرین عنصر در محلی برای حذف
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ArrayReplaceFromEnd {
uint[] public arr;
// حذف یک عنصر باعث ایجاد خلا در آرایه می شود.
// یک روش برای حفظ فشردگی آرایه
// آخرین عنصر را به محل حذف منتقل کنید.
function remove(uint index) public {
// انتقال آخرین عنصر به محل حذف
arr[index] = arr[arr.length - 1];
// حدف آخرین عنصر
arr.pop();
}
function test() public {
arr = [1, 2, 3, 4];
remove(1);
// [1, 4, 3]
assert(arr.length == 3);
assert(arr[0] == 1);
assert(arr[1] == 4);
assert(arr[2] == 3);
remove(2);
// [1, 4]
assert(arr.length == 2);
assert(arr[0] == 1);
assert(arr[1] == 4);
}
}
Solidity