gpt4 book ai didi

sorting - cli C++ 对某个属性的对象列表进行排序

转载 作者:行者123 更新时间:2023-12-03 09:18:08 25 4
gpt4 key购买 nike

我只想对某个属性的列表进行排序。

我有一个具有以下属性的 LinePiece 对象:

String^ Type;
int X, Y, X2, Y2;
System::String^ Text;

现在我有一个包含这些 LinePieces 的列表,我想根据 X 值 对它们进行排序。

我在List->Sort();中找到了一些东西,但我需要提供一些信息。但我不知道如何告诉它根据 X 值对我的列表进行排序。

那么如何根据对象的 X 值对列表进行排序?

最佳答案

如果我读到您问题的字里行间,听起来有时您想根据 X 值进行排序,有时您想根据 Y 进行排序> 值(value)。如果是这种情况,那么我会实现 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();
}

关于sorting - cli C++ 对某个属性的对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com