gpt4 book ai didi

c# - 使用 IComparer 进行排序

转载 作者:IT王子 更新时间:2023-10-29 04:06:04 24 4
gpt4 key购买 nike

我正在尝试使用 IComparer对点列表进行排序。这是 IComparer 类:

public class CoordinatesBasedComparer : IComparer
{
public int Compare(Object q, Object r)
{
Point a = (p)q;
Point b = (p)r;
if ((a.x == b.x) && (a.y == b.y))
return 0;
if ((a.x < b.x) || ((a.x == b.x) && (a.y < b.y)))
return -1;

return 1;
}
}

在客户端代码中,我尝试使用此类对点列表 p (类型 List<Point> )进行排序:

CoordinatesBasedComparer c = new CoordinatesBasedComparer();
Points.Sort(c);

代码出错。显然它期待 IComparer<Point>作为排序方法的参数。
我需要做什么来解决这个问题?

最佳答案

您需要实现强类型接口(interface) ( MSDN )。

public class CoordinatesBasedComparer : IComparer<Point>
{
public int Compare(Point a, Point b)
{
if ((a.x == b.x) && (a.y == b.y))
return 0;
if ((a.x < b.x) || ((a.x == b.x) && (a.y < b.y)))
return -1;

return 1;
}
}

顺便说一句,我认为你使用了太多大括号,我认为只有当它们对编译器有贡献时才应该使用它们。这是我的版本:

if (a.x == b.x && a.y == b.y)
return 0;
if (a.x < b.x || (a.x == b.x && a.y < b.y))
return -1;

就像我不喜欢人们使用 return (0) 一样。


请注意,如果您的目标是 .Net-3.5+ 应用程序,您可以使用 LINQ,它在排序时更容易甚至更快。

LINQ 版本可以是这样的:

var orderedList = Points.OrderBy(point => point.x)
.ThenBy(point => point.y)
.ToList();

关于c# - 使用 IComparer 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336416/

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