LibArrayForUint256Utils.sol

LibArrayForUint256Utils提供了Uint256数组的相关操作,包括查找、比较、移除、添加、翻转、合并、去重和排序等操作。

使用方法

首先需要通过import引LibArrayForUint256Utils类库,然后通过”.”进行方法调用,如下为调用indexOf方法的例子:

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;
    
    function f() public returns(bool, uint) {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        uint256 key = 3;
        bool flag;
        uint index;
        return LibArrayForUint256Utils.firstIndexOf(array, key);//Expected (true, 2)
    }
}

API列表

编号 API API描述
1 binarySearch(uint256[] storage array, uint256 key) internal pure returns (bool, uint) 对一个升序的数组进行二分查找
2 indexOf(uint256[] storage array, uint256 key) internal pure returns (bool, uint) 对任意数组进行查找
3 reverse(uint256[] storage array) internal 对数组进行翻转操作
4 equals(uint256 a[], uint256 b[]) internal pure returns (bool) 判断两个数组是否相同
5 removeByIndex(uint256[] storage array, uint index) internal 根据索引删除数据元素
6 removeByValue(uint256[] storage array, uint256 value) internal 根据值进行数据元素删除,只删除第一个匹配的元素
7 addValue(uint256[] storage array, uint256 value) internal 当数组中不存在元素时,把元素添加在数组末尾
8 extend(uint256[] storage a, uint256[] storage b) internal 合并两个数组,将第二个数组合并在第一个数组上
9 distinct(uint256[] storage array) internal returns (uint256 length) 对数组进行去重操作
10 qsort(uint256[] storage array) internal pure 对数组进行升序排列
11 max(uint256[] storage array) internal view returns (uint256, uint256) 找出数组的最大值及index
12 min(uint256[] storage array) internal view returns (uint256, uint256) 找出数组的最小值及index

API详情

1. binarySearch 方法

binarySearch对一个升序排列的数组进行二分查找,如果找到,则返回true,并返回第一个匹配的元素索引;反之,返回(false,0)

参数

  • array:升序排列的数组
  • key:待查找的元素

返回值

  • bool:当找到元素,则返回true,反之,返回false;
  • uint:当找到元素,返回第一个匹配的元素索引,反之返回0;

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;
    
    function f() public returns(bool, uint) {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        uint256 key = 3;
        bool flag;
        uint index;
        return LibArrayForUint256Utils.binarySearch(array, key);//Expected (true, 2)
    }
}

2. firstIndexOf 方法

对任意数组进行查找,如果找到,则返回true,并返回第一个匹配的元素索引;反之,返回(false,0)

参数

  • array:升序排列的数组
  • key:待查找的元素

返回值

  • bool:当找到元素,则返回true,反之,返回false;
  • uint:当找到元素,返回第一个匹配的元素索引,反之返回0;

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;
    
    function f() public returns(bool, uint) {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        uint256 key = 3;
        bool flag;
        uint index;
        return LibArrayForUint256Utils.firstIndexOf(array, key);//Expected (true, 2)
    }
}

3. reverse 方法

reverse方法对任意数组进行元素翻转。

参数

  • array:数组

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;
    
    function f() public  {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        LibArrayForUint256Utils.reverse(array);//array becomes 3 2 1
    }
}

4. equals 方法

equals方法用于判断两个数组是否相等,当两个数组的元素完全相等时,则返回true,反之返回false。

参数

  • a:数组a
  • b:数组b

返回值

  • bool:当两个数组的元素完全相等时,则返回true,反之返回false

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array1;
    uint[] private array2;
    
    function f() public returns(bool) {
        array1 = new uint[](3);
        array1[0] = 1;
        array1[1] = 2;
    
        array2 = new uint[](3);
        array2[0] = 1;
        array2[1] = 2;    
        return LibArrayForUint256Utils.equals(array1, array2);
    }
}

5. removeByIndex 方法

removeByIndex方法用于根据索引删除数组元素。当数据越界时报错,当元素不存在时,数组保持不变。

参数

  • array:数组
  • index:待删除的元素索引

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint) {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        LibArrayForUint256Utils.removeByIndex(array,0);
        return array.length;//Expect 2
    }
}

6. removeByValue 方法

removeByValue方法用于根据元素值删除数组元素。当数据越界时报错,当元素不存在时,数组保持不变,只删除第一个匹配的元素。

参数

  • array:数组
  • value:待删除的元素值

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint) {
        array = new uint[](3);
        array[0] = 1;
        array[1] = 2;
        array[2] = 2;
        LibArrayForUint256Utils.removeByValue(array,2);
        return array.length;//Expect 2
    }
}

7. addValue 方法

addValue方法用于向数组中添加元素,且保持数组的元素唯一。当数组中已存在当前值,则不进行添加。

参数

  • array:数组
  • value:待添加的元素

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint) {
        array = new uint[](0);
        LibArrayForUint256Utils.addValue(array,2);
        return array.length;//Expect 1
    }
}

8. extend 方法

extend方法用于合并两个数组,将第二个数组中的元素按照顺序追加到第一个数组后面。

参数

  • a:被追加数组
  • b:待追加数组

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;
    uint[] private array2;

    function f() public returns(uint) {
        array = new uint[](2);
        array2 = new uint[](2);
        LibArrayForUint256Utils.extend(array,array2);
        return array.length;//Expect 4
    }
}

9. distinct 方法

distinct方法用于对数组进行去重操作。

参数

  • array:数组

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint) {
        array = new uint[](3);
        array[0] = 2;
        array[1] = 2;
        array[2] = 2;
        LibArrayForUint256Utils.distinct(array);
        return array.length;//Expect 1
    }
}

10. qsort 方法

qsort方法用于对数组进行快速排序。

参数

  • array:数组

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint,uint,uint) {
        array = new uint[](3);
        array[0] = 3;
        array[1] = 2;
        array[2] = 1;
        LibArrayForUint256Utils.qsort(array);
        return (array[0], array[1], array[2]);//expect 1,2,3
    }
}

11. max 方法

对任意数组进行查找最大值,并返回最大值所在的index

参数

  • array:待查找的数组

返回值

  • uint256:最大值;
  • uint256:最大值的index;

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint, uint) {
        array = new uint[](3);
        array[0] = 3;
        array[1] = 2;
        array[2] = 1;
        return LibArrayForUint256Utils.max(array);//3 , 0
    }
}

12. min 方法

对任意数组进行查找最小值,并返回最小值所在的index

参数

  • array:待查找的数组

返回值

  • uint256:最小值;
  • uint256:最小值的index;

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibArrayForUint256Utils.sol";

contract test {
    
    uint[] private array;

    function f() public returns(uint, uint) {
        array = new uint[](3);
        array[0] = 3;
        array[1] = 2;
        array[2] = 1;
        return LibArrayForUint256Utils.min(array);//1 , 2
    }
}