gpt4 book ai didi

solidity - 如何检查数组中是否存在一个值?

转载 作者:行者123 更新时间:2023-12-05 09:28:36 44 4
gpt4 key购买 nike

我需要检查 X 数组中的所有值是否都存在于 Y 数组中。顺序无关紧要。

contract test {

uint[] numbers1;
uint[] numbers2;

function push1(uint num1, uint num2, uint num3) public {
numbers1.push(num1);
numbers1.push(num2);
numbers1.push(num3);
}

function push2(uint num1, uint num2, uint num3) public {
numbers2.push(num1);
numbers2.push(num2);
numbers2.push(num3);
}

}

如何检查 numbers1 中的所有数字是否存在于 numbers2 中?

最佳答案

有两种方法。

您可以创建一个 view 函数 ( docs ),它循环遍历数组并在找到项目时返回 true。请注意,view 函数可以使用 gas-free 只读 call 调用。而不是(读写)transaction计算汽油费。

function exists1(uint num) public view returns (bool) {
for (uint i = 0; i < numbers1.length; i++) {
if (numbers1[i] == num) {
return true;
}
}

return false;
}

这种方法具有线性复杂性。因此,如果您需要在交易期间验证值是否存在,则成本可能会很高,具体取决于数组中项目的总数。

因此有第二种方法 - 将值复制为 mapping ( docs ) 的键,可以通过其键直接访问。搜索值的复杂性始终存在,但存储值的成本翻倍。

uint[] numbers1;
mapping(uint => bool) public exists1; // default value for each key is false

function push1(uint num1, uint num2, uint num3) public {
numbers1.push(num1);
numbers1.push(num2);
numbers1.push(num3);

exists1[num1] = true;
exists1[num2] = true;
exists1[num3] = true;
}

关于solidity - 如何检查数组中是否存在一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71226909/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com