فرز قائمة نقاط ثنائية الأبعاد (أولاً بواسطة x ثم y)
-
04-10-2019 - |
سؤال
أحاول فرز قائمة بنقاط ثنائية الأبعاد أولاً بواسطة X-co-co-co-co-coDinate. لقد قمت بتطبيق واجهة icomparer على النحو التالي:
class PointComparer : IComparer<Point>
{
public int Compare(Point x, Point y)
{
if (x.Y != y.Y)
{
return x.Y - y.Y;
}
else
{
return x.X - y.X;
}
}
}
ثم اتصل بالفرز على النحو التالي:
pointsList.Sort(new PointComparer());
لسبب ما ، لا تُحدد القائمة. بالتأكيد شيء بسيط للغاية وسخيف ، لكنه عالق في هذا لفترة طويلة .... TIA
المحلول
هذا يجب أن يعمل بشكل أفضل:
class PointComparer : IComparer<Point>
{
public int Compare(Point first, Point second)
{
if (first.X == second.X)
{
return first.Y - second.Y;
}
else
{
return first.X - second.X;
}
}
}
إذا كانت قيم X مختلفة ، فستستخدم قيمة Y للفرز. هذا يختلف عن الكود الخاص بك ، حيث سيتم استخدام قيم X إذا كانت قيم Y هي نفسها.
كما ذكر الآخرون ، إذا كان بإمكانك استخدام LINQ ، فيجب عليك استخدام OrderBy
و ThenBy
طرق التمديد:
pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
نصائح أخرى
ألا يمكنك استخدام Orderby -> Thenby؟
لما لا:
var sorted = pointsList.OrderBy(p => p.X)
.ThenBy(p => p.y)
لا تنتمي إلى StackOverflow