实体映射

时间:2018-09-21 22:47:42

标签: solidity smartcontracts

因此,我试图创建一个数据结构,其中将byte32映射到地址数组,每个地址都映射到uint。

我正在考虑以下方法,但这似乎不正确:

mapping (byte32 => mapping (address[] => uint))

如果可能,请帮助我。如果问题描述不够清楚,请随时告诉我。

示例:有一个属性,该属性映射到所有者(address)(该属性的所有者)的数组,每个所有者都映射到他们在其中拥有的股份(uint)属性。

2 个答案:

答案 0 :(得分:1)

是的,这是可行的,这是建议的方法。

要记住的事情是,您不能简单地遍历所有项(就像数组一样),但是如果您的应用程序不需要这样做,那么您就可以了。

要考虑的另一件事是创建一个具有ID和属性的struct,但这又取决于您的特定应用程序。

答案 1 :(得分:0)

  

示例:有一个属性,该属性映射到一个数组   owner(address)(财产的所有者),并且每个所有者都映射到   他们在该财产中拥有的股份。

一种实现此目的的方法类似于下面使用struct

struct Division {
    address owner;
    uint256 plots;
}

mapping(bytes32 => Division[]) Properties;    

function addDivision(bytes32 _property, address _owner, uint256 _plots) 
   public returns (bool success) {


    Division memory currentEntry;

    currentEntry.owner = _owner;
    currentEntry.plots = _plots;


    Properties[_property].push(currentEntry);

    return true;
}


function getPlot(bytes32 _property, address _owner) public view returns (uint) {


    for(uint i = 0; i < Properties[_property].length;  i++) {
        if(Properties[_property][i].owner == _owner)
          return Properties[_property][i].plots;
        }
    return 9999;
}