Solidity

在多個映射中引用公共數組

  • September 16, 2021

試圖了解區塊鏈中的記憶體,以便將數組的引用共享為多個映射的公共儲存。

假設需要以下關係。所以會有產品不斷創建並添加到產品數組中。我想用 uint256 中的一些鍵創建產品映射,並映射客戶到產品的關係,如下所示。

Product[] Products;
mapping(uint256 => Product) ProductsMap;
mapping(address => mapping(uint256 => Product) CustomerProductsMap;

因此,假設在 uint256 中創建了具有唯一 ID 的新產品,

uint256 Id = 1;
Product memory newProduct =  Product({
  id: Id,
  name: "toy",
  price: 100000
});

我們將它添加到數組中,以便快速獲取外部函式。

Products.push(newProduct);

我們添加了 key-val 對以便快速查找,例如:

ProductsMap[Id] = newProduct; 

現在,我想使用相同的實例創建客戶-產品關係。

CustomerProductsMap[customerAddress][Id] = newProduct;

所以這是一個問題,當 newProduct 的值更新為:

ProductsMap[1].price = 200000

無論我使用哪個地圖/數組查找,我是否可以假設該產品的價格現在發生了變化?我希望他們都引用相同的記憶。

不,您已經創建了相同數據的三個副本。

不能為這種情況推荐一些東西,但通常有一個映射 from IDtoProduct和 storageID而不是Product.

引用自:https://ethereum.stackexchange.com/questions/109949