В Solidity существует множество структур данных, используемых для организации и обработки информации. Ниже приведены некоторые из наиболее часто используемых структур данных.
существовать Solidity , множество (Массив) — базовая структура данных,Он может хранить несколько элементов одного типа.,Порядок элементов существующего множества определяется значением их индекса. в соответствии с заданной длиной,множество Можно разделить на два типа:фиксированная длинаидинамичный。правильныйфиксированная длинастепеньмножествосуществовать Фиксированный размер при создании,После этого его нельзя изменить; «динамичное множество» не имеет фиксированной длины.,Элементы можно добавлять или удалять.
создать массив
Статический массив создается следующим образом, где <Type>
это тип данных элемента,<Size>
длина массива:
<Type>[<Size>] arrayName;
Например,Создайте длину5И тип элементаuint
измножество,Его можно создать следующим образом:
uint[5] myArray;
Для динамических массивов они создаются следующим образом:
<Type>[] arrayName;
Например,Создайтединамичныймножество,Тип элементаuint
:
uint[] myArray;
Доступ и изменение элементов массива
существовать Solidity , к элементам массива можно получить доступ или изменить их с помощью индекса массива (начиная с 0). Например:
myArray[0] = 10; // Измените значение первого элемента из числа до 10.
uint firstElement = myArray[0]; // Доступ к первому элементу из множества
Свойства и методы массива
Для массивов есть некоторые часто используемые свойства и методы:
•length
свойство:возвращатьсямножествоиздлина。•push
метод:относится только кдинамичныймножество,Используется для добавления элемента в конец существования множество.,в то же времямножествоиздлина会增加1。•pop
метод:относится только кдинамичныймножество,Используется для удаления последнего элемента из множества,В то же время длина множества уменьшится на 1.
подиз Примерсерединапоказывает, каксуществовать Solidity Используйте динамические массивы в:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;
contract Test {
uint[] public numArray;
// Добавляйте элементы во множество
function addToArray(uint num) public {
numArray.push(num);
}
// Получить длину множества
function getArrayLength() public view returns (uint) {
return numArray.length;
}
// Получить элементы из множества на основе индекса
function getElement(uint index) public view returns (uint) {
return numArray[index];
}
// Удалить последний элемент из множества
function removeLastElement() public {
numArray.pop();
}
}
существоватьSolidityсередина,Struct — сложный тип данных.,Позволяет объединить несколько переменных разных типов в одну сущность.
Основной синтаксис создания структуры следующий:
struct StructName {
Type1 variable1;
Type2 variable2;
...
}
Среди них «StructName» — это имя, определенное вами для структуры, «Type1» и «Type2» — это типы данных переменных (таких как uint, адрес, строка и т. д.), а «variable1» и «variable2». — имена этих переменных.
Ниже приведен конкретный пример определения структуры:
struct Student {
uint id;
string name;
uint age;
}
существуют После определения структуры,Вы можете создать новый экземпляр структуры,и инициализировать его значение。Например:
Student memory newStudent = Student({
id: 1,
name: "Alice",
age: 20
});
Уведомление,существуют В блоке кода выше,Ключевое слово «память» является обязательным.,Указывает, что этот экземпляр структуры хранится в памяти.
Вы также можете напрямую обращаться к переменным-членам структуры и изменять их. Например:
newStudent.name = "Bob"; // Измените поле «имя» в экземпляре структуры.
string studentName = newStudent.name; // Доступ к полю «имя» в экземпляре структуры
кроме того,Вы также можете отобразить структуру хранилищасуществовать множество или отобразить,для достижения более сложныхиз Управление данными。Например:
// хранилищесуществоватьмножествосередина
Student[] public students;
// отображение хранилищасуществовать, где адрес является ключом, а структура Student — значением
mapping(address => Student) public studentInfo;
В следующем примере показан простой сценарий использования Struct:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;
contract StructExample {
struct Student {
uint256 id;
string name;
uint256 age;
}
Student[] public students;
function addStudent(
uint256 _id,
string calldata _name,
uint256 _age
) public {
// 3 метода инициализации
// 1. Как и при вызове функции, порядок формальных параметров во время инициализации должен соответствовать порядку полей структуры.
students.push(Student(_id, _name, _age));
// // 2. key => форма стоимости
// students.push(Student({id: _id, name: _name, age: _age}));
// // 3. Использовать временную переменную
// Student memory stu;
// stu.age = _age;
// stu.id = _id;
// stu.name = _name;
// students.push(stu);
}
function getStudent(uint256 _index)
public
view
returns (
uint256,
string memory,
uint256
)
{
Student memory stu = students[_index];
return (stu.id, stu.name, stu.age);
}
}
существовать Solidity В языке Mapping — это структура данных, которая связывает значения (ключи) одного типа со значениями (значениями) другого типа, аналогично хеш-таблицам или словарям во многих языках программирования. Ключевым типом карты может быть любой базовый тип, включая байтовые и целочисленные типы, но не могут быть карты, динамические массивы, контракты, перечисления и структуры. Ограничений на тип отображаемого значения практически нет, и это может быть даже другая карта.
Ниже приведен основной синтаксис для создания карты:
mapping(_KeyType => _ValueType) public mappingName;
существоватьздесь,_KeyType
это ключизтип данных,_ValueType
даценитьизтип данных,иpublic
Ключевые слова позволяют использовать сопоставление вне контрактов.изчтение программы(но не может быть изменено)。
Приведите пример,Следующий код создает файл с именемbalances
изкартографирование,Он сопоставляет адрес сuint
ценить:
mapping(address => uint) public balances;
существуют После создания отображения,Можно использоватьсерединаскобки[]
来访问或修改картографированиесерединаизэлемент,
balances[address1] = 100; // Установить адрес адрес1 Баланс 100
uint balance = balances[address1]; // Получить адрес адрес1 баланс
нуждаться Уведомлениеизда,Отображение существования По умолчанию все ключи сохраняются существующими, а соответствующие значения по умолчанию равны начальному значению типа.,нравитьсяпереписыватьсяuint
из默认да0
,переписыватьсяbool
из По умолчаниюfalse
。
Вот более полный пример контракта Solidity, который использует сопоставление для управления балансами счетов:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;
contract MyContract {
// Определите сопоставление для определения баланса, соответствующего каждому адресу.
mapping(address => uint) public balances;
// депозит
function deposit(uint amount) public {
// Увеличить баланс отправителя
balances[msg.sender] += amount;
}
// Получить баланс
function getBalance() public view returns (uint) {
return balances[msg.sender];
}
}
существоватьSolidityсередина,Тип перечисления (enum) — это специальный тип, определенный разработчиком.,Это позволяет вам создавать предопределенный набор значений. Перечисление можно рассматривать как тип с ограниченными значениями.,Это помогает сделать код более понятным и понятным.,Уменьшите количество ошибок.
Ниже приведен основной синтаксис для определения типа перечисления:
enum EnumName {
Value1,
Value2,
...
}
существоватьздесь,«EnumName» — это имя, которое вы определили для перечисления.,«Значение1» и «Значение2» и т. д. — это значения в перечислении.
Вот пример фактического определения перечисления:
enum State {
Created,
Locked,
Inactive
}
существовать Этот примерсередина,State
— имя перечисления, а Created
、Locked
и Inactive
— значение в этом перечислении.
После определения типа перечисления,Вы можете создать переменную этого типа в контракте существования.,и установите его в это перечислениесерединаизценить。Например:
State public state = State.Created;
существует В приведенном выше фрагменте кода есть публичный State
типизсостояниепеременная,этоизисходныйценитьустановлено наCreated
。
Вы также можете изменить или проверить переменную этого типа перечисления в функции контракта существования:
function makeInactive() public {
state = State.Inactive; // Изменить значение перечисления переменная
}
function checkState() public view returns(bool) {
return state == State.Inactive; // Проверьте значение перечисления переменная
}
Отказ от ответственности: эта работа распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)[1]. Пожалуйста, укажите источник при ее использовании. Автор: мэнбин[2] блог: мэнбин[3] Гитхаб: mengbin92[4] cnblogs: Непреднамеренно полюбила воду[5] Сообщество разработчиков облачных технологий Tencent: Мюнстер[6]
[1]
С указанием авторства-Некоммерческая-ShareAlike 4.0 интернациональность (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh
[2]
mengbin: mengbin1992@outlook.com
[3]
mengbin: https://mengbin.top
[4]
mengbin92: https://mengbin92.github.io/
[5]
Влюбляюсь в воду нечаянно: https://www.cnblogs.com/lianshuiwuyi/
[6]
Мюнстер: https://cloud.tencent.com/developer/user/6649301