
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//学习结构体和映射的联合使用
contract test {
//先定义一个结构体
struct Phone{
string name;//品牌名称
uint year;//手机年份
address user;//该手机的用户
}
//开始使用结构体,需要声明才能使用
Phone public phones;
//然后创建一个数组,用于结构体,关系是用户都存储在一个数组里,每一个用户又有下级的结构体
Phone[] public phoneArr;
//定义好两个数据类型后,进行映射,意思是一个人可能有很多部手机
mapping (address\=>Phone[]) public classPhone;
//创建方法对结构体进行增删改查
function editPhone() external {
//要对其进行操作,就需要传入数据,才能操作,所以开始传入数据
//第一种书写方式
Phone memory huawei \= Phone("huawei",2000,msg.sender);
//第二中书写方式
Phone memory xiaomi \= Phone({user:msg.sender,year:2001,name:"xiaomi"});
//第三种书写方式
Phone memory pingguo;
pingguo.name \= "pingguo";
pingguo.user \= msg.sender;
pingguo.year \= 1999;
//推入数组存储,把结构体定义的数据,推入数组
phoneArr.push(huawei);
phoneArr.push(xiaomi);
phoneArr.push(pingguo);
//不使用局部变量直接存储
phoneArr.push(Phone("meizhu",2000,msg.sender));
//取出数据尝试
//取出数据跟php要new一下一样,鬼迷日眼的
/**
phoneArr[0] == 这个数组中索引为0 的结构体,
*/
Phone memory userVueArr \= phoneArr[0];
//取值了
userVueArr.name;
userVueArr.user;
userVueArr.year;
//如果要修改,则不要使用memory,使用stronger
Phone storage editUserArr \= phoneArr[1];
editUserArr.name \= "jinli";
delete editUserArr.user;
//删除整个用户
delete phoneArr[2];
}
}