如何在智能合约中将 Struct 转换为 Array?
How can I convert a Struct to Array in smart contract?
我会写一个关于病人病历的智能合约。我有一个例子。但是所有数据都存储在结构中。我想使用时间序列数据。据我所知,我必须使用结构数组,但我不知道该怎么做?
你能帮帮我吗?
contract MedicalHistory {
enum Gender {
Male,
Female
}
uint _patientCount = 0;
struct Patient {
string name;
uint16 age;
//max of uint16 is 4096
//if we use uint8 the max is uint8
string telephone;
string homeAddress;
uint64 birthday; //unix time
string disease; //disease can be enum
uint256 createdAt; // save all history
Gender gender;
}
mapping(uint => Patient) _patients;
function Register(
string memory name,
uint16 age,
string memory telephone,
string memory homeAddress,
uint64 birthday,
string memory disease,
// uint256 createdAt,
Gender gender
}
}
这是我的智能合约的代码片段。我如何将结构转换为数组?
您可以.push()
进入存储阵列,有效地添加新项目。
我简化了代码示例,以便更容易看到实际的数组操作:
pragma solidity ^0.8;
contract MedicalHistory {
struct Patient {
string name;
uint16 age;
}
Patient[] _patients;
function Register(
string memory name,
uint16 age
) external {
Patient memory patient = Patient(name, age);
_patients.push(patient);
}
}
请注意,如果您使用的是 public 网络(例如以太坊),即使存储在非 public
属性 网络中,也可以通过查询合同存储槽。有关代码示例,请参阅 。所以除非这只是一个学术练习,否则我真的不建议在区块链上存储健康和其他敏感数据。
我会写一个关于病人病历的智能合约。我有一个例子。但是所有数据都存储在结构中。我想使用时间序列数据。据我所知,我必须使用结构数组,但我不知道该怎么做?
你能帮帮我吗?
contract MedicalHistory {
enum Gender {
Male,
Female
}
uint _patientCount = 0;
struct Patient {
string name;
uint16 age;
//max of uint16 is 4096
//if we use uint8 the max is uint8
string telephone;
string homeAddress;
uint64 birthday; //unix time
string disease; //disease can be enum
uint256 createdAt; // save all history
Gender gender;
}
mapping(uint => Patient) _patients;
function Register(
string memory name,
uint16 age,
string memory telephone,
string memory homeAddress,
uint64 birthday,
string memory disease,
// uint256 createdAt,
Gender gender
}
}
这是我的智能合约的代码片段。我如何将结构转换为数组?
您可以.push()
进入存储阵列,有效地添加新项目。
我简化了代码示例,以便更容易看到实际的数组操作:
pragma solidity ^0.8;
contract MedicalHistory {
struct Patient {
string name;
uint16 age;
}
Patient[] _patients;
function Register(
string memory name,
uint16 age
) external {
Patient memory patient = Patient(name, age);
_patients.push(patient);
}
}
请注意,如果您使用的是 public 网络(例如以太坊),即使存储在非 public
属性 网络中,也可以通过查询合同存储槽。有关代码示例,请参阅