Unity Array问题

时间:2014-01-01 05:24:06

标签: multidimensional-array unity3d unityscript

我有一个数组:

var playpicks2 = new Array("000", "001", "002");

和数组中的数组:

var allwinning = new Array(
["000", "001", "002"],
["000", "010", "020"],
["000", "011", "022"],...);
var playpicks = allwins[0];

这就是我想要做的事情:

if(playpicks==playpicks2)
{
print("yes they are matched");
}
else
{
print("No No No!");
}
// and I always get "No No No!"

当我print(playpicks2)时,我

000,001,002

但当我print(playpicks)时,我

System.String[]

我该如何解决这个问题?有没有一种直接的方式将String[]转换为普通数组,如playpicks2?谢谢!

2 个答案:

答案 0 :(得分:0)

你得到“No No No”,因为数组是引用类型。 [1,2] === [1,2]将返回false,因为它们不引用同一个对象。要检查数组相等性,请使用jquery或下划线等库。

http://underscorejs.org/#isEqual

另外,使用Array构造函数很麻烦。为什么不使用文字?

答案 1 :(得分:0)

我宁愿尝试找出导致问题的原因,而不是依靠JQuery或任何奇迹工具来消除麻烦。

基本上,==运算符只进行浅层相等测试。它不会测试数组的每个值,只测试全局数组引用。

在您的情况下,数组包含相同的文字值,但它们仍然是不同的对象,因此==比较失败。

一般的深入比较功能或奇迹JQuery包括可以解决问题,但那将使用原子弹杀死蚂蚁。

我建议你在每个数组like this fiddle shows上使用toString()方法:

var playpicks2 = ["000", "001", "002"];

var allwinning = [
["000", "001", "002"],
["000", "010", "020"],
["000", "011", "022"]];
var playpicks = allwinning[0];

// shallow comparison fails, though console.log shows identical strings
if(playpicks==playpicks2)
    console.log("yes they are matched");
else
    console.log("No No No! ["+playpicks+"] / ["+playpicks2+"]");

// string value comparison succeeds
if(playpicks.toString()==playpicks2.toString())
    console.log("yes they are matched: "+playpicks.toString());
else
    console.log("No No No! ["+playpicks+"] / ["+playpicks2+"]");

正如其他人所指出的,我使用了文字的aray符号,它与你的完全相同,只是更紧凑。

我还使用了console.log调试功能,因此您必须激活控制台才能看到小提琴中的内容。