Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较3个对象_C#_Comparison_Comparator_Icomparable_Icomparer - Fatal编程技术网

C# 比较3个对象

C# 比较3个对象,c#,comparison,comparator,icomparable,icomparer,C#,Comparison,Comparator,Icomparable,Icomparer,我正在用C编写一个通用的二叉树 在我的应用程序的一部分中,我需要按照距离的顺序进行排序 从A到C,从B到C 大概是这样的: if ((A->C) == (B->C)) return 0; else if((A->C) < (B->C)) return -1; else return 1; 但问题是,我只能比较两个物体。。。我需要一种比较仪 在开始和结束之间创建类一样的距离是正确的解决方案吗?我认为它制造了太多的垃圾 有解决办法吗? 谢谢

我正在用C编写一个通用的二叉树

在我的应用程序的一部分中,我需要按照距离的顺序进行排序

从A到C,从B到C

大概是这样的:

if ((A->C) == (B->C))  
    return 0;
else if((A->C) < (B->C))
    return -1;
else
    return 1;
但问题是,我只能比较两个物体。。。我需要一种比较仪

在开始和结束之间创建类一样的距离是正确的解决方案吗?我认为它制造了太多的垃圾

有解决办法吗? 谢谢,-

编辑:

我没有一个正在工作的IComparer

编辑:

问题解决了,现在我有一个正在工作的IComparer

public class ObjectDistanceComparer : IComparer<EraObject>
{
    Vector3 _position;


    public ObjectDistanceComparer(Vector3 position)
    {
        _position = position;
    }

    int IComparer<EraObject>.Compare(EraObject obj1, EraObject obj2)
    {
        float d1 = (_position - obj1._position).LengthSquared();
        float d2 = (_position - obj2._position).LengthSquared();
        return (d1 == d2)? 0 : (d1 < d2)? -1 : 1;
    }
}

谢谢,-

您可以向节点类添加额外属性:

public class Node : IComparable
{
   Node Parent{get;set;}
   Node LChild {get;set;}
   Node RChild {get;set;}
   Node C {get;set;}

   public int CompareTo(object o)
   {
      // Now you passed C in your object, do stuff ...
   }
}

您可以向节点类添加额外属性:

public class Node : IComparable
{
   Node Parent{get;set;}
   Node LChild {get;set;}
   Node RChild {get;set;}
   Node C {get;set;}

   public int CompareTo(object o)
   {
      // Now you passed C in your object, do stuff ...
   }
}

我想,您可以在一个类中实现一个泛型方法来同时比较三件事,但我认为按顺序进行比较可能更好。你会比较A和B,然后B和C,你会知道确切的顺序,对吗?假设比较是以一种合理的方式为实现类定义的,即它是可传递的。我认为对你的类的用户来说,这是一个公平的假设。你能展示一下你对树的一些代码,以及你打算如何从三个对象中对它进行排序吗。现在还不太清楚这是怎么回事。显示一个示例树及其排序形式。这与您的问题无关,但最好不要在成员变量的定义中使用uu。尤其是公共变量。@Saeed Amiri,我是通过java学习的,如何正确定义成员变量?谢谢,-我想,您可以在一个类中实现一个泛型方法来同时比较三件事,但我认为按顺序进行比较可能更好。你会比较A和B,然后B和C,你会知道确切的顺序,对吗?假设比较是以一种合理的方式为实现类定义的,即它是可传递的。我认为对你的类的用户来说,这是一个公平的假设。你能展示一下你对树的一些代码,以及你打算如何从三个对象中对它进行排序吗。现在还不太清楚这是怎么回事。显示一个示例树及其排序形式。这与您的问题无关,但最好不要在成员变量的定义中使用uu。尤其是公共变量。@Saeed Amiri,我是通过java学习的,如何正确定义成员变量?谢谢,-在OP之前编写的代码显示代码,所以它们不相同,但非常相似的方式适用。在OP之前编写的代码显示代码,所以它们不相同,但非常相似的方式适用。
public class Distance
{
int Source {get;set;}
int Destination{get;set;}
int Value{ 
          get{ return Math.Abs(Destination - Source);}
         }
}