两个数组具有相同的值但不返回等于

时间:2015-12-26 01:06:26

标签: c# arrays compare

我想比较两个数组,如果所有值都相同,我会做一些事情。我写了这样的函数来检查是否有任何不同的值。如果是这样,则返回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);  

    }

控制台照片: enter image description here

3 个答案:

答案 0 :(得分:1)

最可能的原因是eulerAnglesdouble,这意味着不应将其与运营商==进行比较。打印时两个数字看起来可能相同,但它们会比较为不相等。

这里的技巧是使用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()