我们有一个CGPoints数组:
let points = [(1234.0, 1053.0), (1241.0, 1111.0), (1152.0, 1043.0)]
字符串
我想做的是获取数组中x值最高的CGPoint和y值最高的CGPoint。我将使用这些点创建CGRect:
extension CGRect {
init(p1: CGPoint, p2: CGPoint) {
self.init(x: min(p1.x, p2.x),
y: min(p1.y, p2.y),
width: abs(p1.x - p2.x),
height: abs(p1.y - p2.y))
}
}
型
我知道有一种方法可以通过这样做来获得数组中的最大值和最小值:
points.min()
points.max()
型
但是这些似乎不起作用,因为它是一个CGPoints数组。是否可以从数组中获取这些值?
3条答案
按热度按时间iaqfqrcu1#
您可以Map值以找到x和y坐标中的最小值和最大值,如下所示。如果你不确定
points
数组是否包含任何数据,使用guard语句来避免强制解包:字符串
从那里:
型
然后你可以修改你的扩展函数,因为你已经知道哪些值是最小值和最大值:
型
正如Leo Dabus在下面的评论中所建议的,你可以在可失败的初始化器扩展中一次完成所有这些:
型
clj7thdc2#
可以使用
max(by:)
。字符串
k3bvogb13#
您不能仅通过对
min()
/max()
的单个调用来完成此操作偏离y和x坐标的最高点和最低点
具有最小X值的点可以不同于具有最小X值的点。因此,任何只返回其中一个点的方法(如
min()
/max()
)都是不够的。您需要分别调用两个函数,例如:
字符串
或者你可以尝试使用reduce一次性完成所有操作:
型
我可能会这样做:
型