Solidity
為什麼在映射中依賴於參數的查找後,array.length 給出的“長度”未找到或不可見?
這是我定義結構數組的方式:
struct FoodItem { string name; uint price; bool available; } mapping(uint => FoodItem) public foods;
現在我想從這個數組中刪除一個元素。另外,我暫時不需要維持秩序。為此,我做了:
function deleteItem(uint index) public onlyOwner { require(index < foods.length); foods[index] = foods[foods.length-1]; foods.length--; emit deletedItem(index, foods.length); }
但這給了我一個錯誤:
TypeError: Member "length" not found or not visible after argument-dependent lookup in mapping(uint256 => struct FoodOrder.FoodItem storage ref). require(index < foods.length); ^----------^
我正在使用
solidity 0.5.16
這個。
那不是數組。那是一個映射。
映射不能被迭代並且它們是無序的——因此它們也沒有長度。事實上,沒有辦法知道映射有多少條目,除非您將該資訊儲存在其他地方(或通過查看交易從區塊鏈外部計算它)。
要從映射中刪除條目,您可以簡單地
delete foods[id];
. 請注意,id
here不是索引,而是uint
您定義為映射中的鍵的索引。