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