如何整体地获取映射中特定地址的已创建结构的概述?

时间:2019-03-30 11:45:31

标签: struct mapping ethereum solidity smartcontracts

在创建了一些属于特定地址的结构后,我希望获得具有地址相关参数的结构的概述。 那我该怎么做才能解决这个问题呢?

如果我在remix中运行代码,则仅获取第一个存储的地址结构。但是我想找回一个地址的所有存储结构。我知道我们不能遍历映射,但是也许可以为结构数组做一些索引计数器来解决它吗? -那么还可以将数组的索引存储在变量中吗?

pragma solidity ^0.4.17;
contract Prescribe {

struct Prescription {
        address patients_address;
        string medicament;
        string dosage_form;
        uint amount;
        uint date;
        //uint index_counter;
 }

mapping (address => Prescription[]) public ownerOfPrescription;
address [] public patients;

function createPrescription(address patients_address, string 
medicament, string dosage_form, uint amount, uint date) public  
restricted {

ownerOfPrescription[patients_address].push(Prescription({
     patients_address: patients_address,
     medicament: medicament,
     dosage_form: dosage_form,
     amount: amount,
     date: date
}));
patients.push(patients_address);
}

function getOverview(address patient) public view restricted 
returns(string, string, uint, uint) {

for(uint i = 0; i < ownerOfPrescription[patient].length; i++) {
 if(ownerOfPrescription[patient][i].patients_address == patient) {
   return(ownerOfPrescription[patient][i].medicament, 
          ownerOfPrescription[patient][i].dosage_form, 
          ownerOfPrescription[patient][i].amount, 
          ownerOfPrescription[patient][i].date);
    }
  }

}

所以我想像屏幕上的getOverview函数那样拥有一个地址的所有单独结构的返回值,但是它只给我返回地址的第一个结构

2 个答案:

答案 0 :(得分:0)

好吧,它只返回第一个,因为语句之后

 if(ownerOfPrescription[patient][i].patients_address == patient)

return true,您的代码正在执行return语句,这将使控件从函数中退出,并且不再执行任何语句。

答案 1 :(得分:0)

在研究之后,我得出的结论是,仍然不可能获得结构体数组作为返回值。一个人只能访问数组的各个元素,对吗? -如果对此主题有任何更新,我将非常感谢。