gpt4 book ai didi

actionscript-3 - 如何检查一个数组是否包含另一个数组?

转载 作者:行者123 更新时间:2023-12-04 06:42:08 25 4
gpt4 key购买 nike

乍一看它非常简单,但我在不使用大量嵌套循环的情况下执行此操作时遇到了一些问题。

例子:

var father:Array = new Array(0,1,2,3,4,5);
var son:Array = new Array(3,4,5);

father.contains(son) // returns true or 4(the starting index if the contained array)

最佳答案

ActionScript 3 实际上支持一些有点疯狂的东西,因为在早期,Adobe/Macromedia 试图让它与 Ecmascript 兼容。

所以...你可以这样做:

var a1:Array = [1,2,3,4,5,6,7,8,9];
var a2:Array = [3,4,5];

// borrow String's indexOf function, and it magically works on Arrays
// but rename it because Array already has a different indexOf function
a1.indexOf2 = String.prototype.indexOf;

trace(a1.indexOf2(a2) > -1); // true

但是您需要小心一点,因为它会将所有元素转换为字符串以进行相等性测试。对于基元来说,这大多无关紧要,但它会严重破坏对象,因为它们都会被转换为 "[object Object]" 或任何它们的 toString() 返回。

此外,如果您想对任何事物使用实际索引,而不是仅仅检查它是否不是 -1,您必须除以二,因为这个数字是您期望的两倍。我不完全知道这是为什么:)

如果您需要更通用和更可靠的东西,您最好编写一个函数来进行显式搜索。这是一个简单的例子,我刚刚写的,所以很容易出现错误:

    public function find(haystack:Array, needle:Array):int 
{
var index:int = -1;
while(index <= haystack.length - needle.length)
{
index++;
index = haystack.indexOf(needle[0], index);
for( var i:int = 1; i<needle.length; i++)
{
if(haystack[index+i] != needle[i])
{
continue;
}
}
if( i == needle.length)
{
return index;
}
}
return -1;
}

关于actionscript-3 - 如何检查一个数组是否包含另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679013/

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