我只想对某个属性排序列表。
我有一个LinePiece
具有以下属性的对象:
String^ Type;
int X, Y, X2, Y2;
System::String^ Text;
现在,我有了这些列表,LinePieces
并希望在上对它们进行排序X value
。
我在中找到了一些东西,List->Sort();
但是我需要提供一些信息。但是我不知道如何告诉它在X值上对列表进行排序。
那么,如何在对象的X值上对列表进行排序?
如果我在问题的两行之间阅读,听起来好像有时您希望根据X
值进行排序,而有时您希望根据Y
值进行排序。如果是这种情况,那么我将实现一个Comparer对象,并将其传递List->Sort()
给指定它们应该如何排序。
public ref class CompareByX : Comparer<LinePiece^>
{
public:
virtual int Compare(LinePiece^ a,LinePiece^ b) override
{
return a->X.CompareTo(b->X);
}
};
int main(array<System::String ^> ^args)
{
List<LinePiece^>^ list = ...
list->Sort(gcnew CompareByX());
}
另一方面,如果LinePiece
有一个单一的,固有的,通用的排序顺序,则可以IComparable
在该类上实现,并使用默认的排序方式。但是,执行此操作时,应注意仅0
在两个对象相等时才返回。
执行此操作时,您不需要将任何额外的参数传递给Sort()
,因为这些对象已经知道如何对其进行排序。
public ref class LinePiece : public IComparable<LinePiece^>
{
public:
String^ Type;
int X, Y, X2, Y2;
String^ Text;
virtual int CompareTo(LinePiece^ other)
{
int result = 0;
if (result == 0) result = this->X.CompareTo(other->X);
if (result == 0) result = this->Y.CompareTo(other->Y);
if (result == 0) result = this->X2.CompareTo(other->X2);
if (result == 0) result = this->Y2.CompareTo(other->Y2);
if (result == 0) result = this->Type->CompareTo(other->Type);
if (result == 0) result = this->Text->CompareTo(other->Text);
return result;
}
}
int main(array<System::String ^> ^args)
{
List<LinePiece^>^ list = ...
list->Sort();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句