自助建站 知乎seo引擎
自助建站 知乎,seo引擎,wordpress查看数据库密码,做网站需要注册商标第几类一、数组
在 solidity 中#xff0c;数组分为定长数组和动态数据#xff0c;这两者的定义上跟 golang 很相似#xff1b;其定长数组在创建好后不能设置超过数组长度的值#xff0c;也就是不能push#xff1b;而动态数组允许 push#xff0c;还有一点很有意思的是#x…一、数组
在 solidity 中数组分为定长数组和动态数据这两者的定义上跟 golang 很相似其定长数组在创建好后不能设置超过数组长度的值也就是不能push而动态数组允许 push还有一点很有意思的是在删除数组某个元素后删除的数组中的某个位置的值是还原成了当前类型数组的类型默认值。
1.创建数组
定长数组
定长数组创建很简单只需要在表示数组的 [] 符号中编写对应的长度即可
uint[3] public number2[1,2,3];动态数组
动态数组和定长数组的定义区别则是不需要在 [] 中编写固定长度跟 go 很像
uint[] public number[1,2,3];2.数组操作
在 solidity 中就可以对数组进行增删改改数据不必多说直接索引后进行值的更改就好接下来咱们来看在数组中的增删。
增数据
既然定长数组不能够增加长度那么就说明我们加数组内容需要使用的对象是动态数组动态数组使用增加数据的方式很简单直接使用 push 某值即可代码是
number.push(val);删数据
在数组中删除某个值可以使用 delete方法例如
delete number[1];还有一个方法是 pop
number.pop();由于使用 delete 方式删除值只是使数组中的某个位置的值归为这个类型的原始值并不能修改其长度所以 delete 方法一般用于删除定长数组的值而 pop 方法将会删除这个数组中最后一个元素值并且使其长度发生改变所以可用于动态数组之中。
3.数组在函数中进行创建
创建数组时若在与方法同级那么则直接创建数组即可若在函数之中需要指定当前数据的位置例如以下一个方法
function createArray()external pure{uint[] memory ages new uint[](3);
}以上方法创建了一个 uint 类型的定长数组使用 memory 指定为内存级别的变量长度为3。
二、数组删除某值的方式
在此我们创建一个合约名为 ArrayDemo
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ArrayDemo{
}在合约中创建两个数组一个定长一个动态
uint[] public number[1,2,3];
uint[3] public number2[1,2,3];接着创建几个操作数组的方法
function push(uint val)external{number.push(val);
}
function pop()external{number.pop();
}function deleteVal()external{delete number[number.length-1];
}function createArray()external pure{uint[] memory ages new uint[](3);
}function getArray()external view returns(uint[] memory){return number;
}
以上最后一个代码为返回对应的数组内容此时需要指定返回类型为 uint[] 的 memory。
接着我们需要完成如何删除一个动态数组中的指定索引元素并且使其长度发生改变。
通过需求可知我们必然会使用到 pop 方法那么如何使用 pop 方法呢首先我们要删除指定索引那么指定索引的位置的值必将删除则说明该索引位置的值无效那么接下来我们还需要使数组的长度-1.那么此时我们可以想到数组长度减1后那么数组最后一个值将会丢失此时只需要将最后一个位置的值放到删除索引位置的值上再执行 pop 是不是就ok了所以代码如下
function removeVal(uint index)external{require(indexnumber.length,index out of array);number[index]number[number.length-1];number.pop();
}完整代码如下
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ArrayDemo{uint[] public number[1,2,3];uint[3] public number2[1,2,3];function push(uint val)external{number.push(val);}function pop()external{number.pop();}function deleteVal()external{delete number[number.length-1];}function createArray()external pure{uint[] memory ages new uint[](3);}function getArray()external view returns(uint[] memory){return number;}function removeVal(uint index)external{require(indexnumber.length,index out of array);number[index]number[number.length-1];number.pop();}
}三、映射 map
映射其实就是map 或者是 字典在 solidity 中创建一个 映射示例如下
mapping(addressuint) public balances;映射的创建使用 mapping在后的圆括号中编写映射的类型如上示例为 key 为 address value 为 uint这个映射变量名为 balances映射中可以存在映射例如
mapping(addressmapping(addressuint)) public balances1;设置一个 map 值的方式也很简单如下 function
function setMapVal(address key,uint val)external{balances[key]val;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91823.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!