gpt4 book ai didi

dart - 如何根据3个项目对Dart集合进行排序?

转载 作者:行者123 更新时间:2023-12-03 03:41:55 26 4
gpt4 key购买 nike

考虑一个List<Point>:

class Point {
int x,y;
int getManhattanDistanceTo(Point other) {
return (x - other.x).abs() + (y - other.y).abs();
}
Point(this.x,this.y);
}
void main() {
var points = [Point(0,0), Point(4,6), Point(9,23), Point(55,3)];
// How to sort points based on distance from an arbitrary Point?
}

我想根据它们与任意 Point的距离对这些点进行排序。我认为实现 Comparable不是一个好主意。相反,我可以编写一个 Comparator,但是由于 Comparator的签名仅需要2个项目,因此我不确定如何考虑任意点。我想使用 Comparator,所以我可以叫 List.sort(Comparator)

我是否只写了诸如 List<Point> sort(Point point, List<Point> points)之类的常规函数​​?

如果有人能想到这个问题的更好标题,请对其进行编辑。

最佳答案

可比和比较器是关于相互比较项目。如果需要相对于对象的外部信息进行比较,则需要将其传递给比较操作。您可以使用以下代码对此进行抽象:

Function sortRelativeTo(Point reference) {
int comp(Point p1, Point p2) {
return p1
.getManhattanDistanceTo(reference)
.compareTo(p2.getManhattanDistanceTo(reference));
}
return comp;
}

然后可以将其用作:
Point reference = Point(xxx, yyy);
points.sort(sortRelativeTo(reference));

关于dart - 如何根据3个项目对Dart集合进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055339/

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