我想比较两个数组,如果所有值都相同,我会做一些事情。我写了这样的函数来检查是否有任何不同的值。如果是这样,则返回false。
bool Deneme ()
{
for (int i = 0; i < correctOnes.Length; i++) {
if(correctOnes[i] != cubeRotation[i].rotation.eulerAngles)
{
return false;
}
}
return true;
}
当我调用Deneme函数时,它总是返回false。但是,我检查控制台中的数组值是否相同。有什么想法发生了什么?
像那样检查控制台
for (int i = 0; i < correctOnes.Length; i++) {
Debug.Log ("Corrects: " + correctOnes[i]);
Debug.Log ("Cubes: " + cubeRotation[i].rotation.eulerAngles);
}
答案 0 :(得分:1)
最可能的原因是eulerAngles
为double
,这意味着不应将其与运营商==
进行比较。打印时两个数字看起来可能相同,但它们会比较为不相等。
这里的技巧是使用Math.Abs(a-b) < 1E-8
方法进行比较:
if(Math.Abs(correctOnes[i]-cubeRotation[i].rotation.eulerAngles) < 1E-8) {
...
}
上面,1E-8
是一个小数字,表示比较double
s的容差。
答案 1 :(得分:0)
我发布了测试脚手架的完整性,但第35行的linq查询应该可以获得通过/未通过的结果。
class Ans34467714
{
List<double> correctOnes = new List<double>() { 22.7, 22.6, 44.5, 44.5, 44.5};
List<rotation> cubeRotation = new List<rotation>() { new rotation() { eulerAngles = 22.3 }, new rotation() { eulerAngles = 22.6 }, new rotation() { eulerAngles = 44.5 }, new rotation() { eulerAngles = 44.5 }, new rotation() { eulerAngles = 44.5 } };
public Ans34467714()
{
}
internal bool Execute(string[] args)
{
bool retValue = false;
if (Deneme())
{
Console.WriteLine("Pass");
}
else
{
Console.WriteLine("Fail");
}
return retValue;
}
internal bool Deneme()
{
return correctOnes.Where((var, index) => cubeRotation[index].eulerAngles == var).Count() == correctOnes.Count;
}
}
class rotation
{
public double eulerAngles {get; set;}
public rotation()
{
}
}
答案 2 :(得分:0)
你可以试试
default Spliterator<T> spliterator()