我相信我可以使用reduce函数,但是我不清楚如何做到这一点。我的失败尝试是:
runways.reduce(0, combine: { max($0.maxLat,$1.maxLat)})
但我收到一个错误,提示Double没有名为maxLat的成员...?我也尝试过这个:
runways.reduce(0, combine: { max(((Runway)$0).maxLat,((Runway)($1)).maxLat)});
这也不起作用。我确定这是一个快速解决方案...有人吗?
可在操场上使用的代码
struct Runway {
let lat1 : Double
let lat2 : Double
let lon1 : Double
let lon2 : Double
let id1 : String
let id2 : String
var minLat : Double {
get {
return min(lat1,lat2)
}
}
var minLon : Double {
get {
return min(lon1,lon2)
}
}
var maxLat : Double {
get {
return max(lat1,lat2)
}
}
var maxLon : Double {
get {
return max(lon1,lon2)
}
}
init(Name n1 : String, Lat lat1 : Double, Lon lon1 : Double, Name n2 : String, Lat lat2 : Double, Lon lon2 : Double ) {
self.id1 = n1;
self.id2 = n2;
self.lat1 = lat1;
self.lat2 = lat2;
self.lon1 = lon1;
self.lon2 = lon2;
}
}
///Airport class has min/max etc
class Airport {
///Airport Name
let name : String
///Runway hodler array
var runways : [Runway] = []
func addRunway(rwy : Runway) {
runways.append(rwy)
}
init (name : String) {
self.name = name
}
func getMaxLat() {
// Iterate through all runways and compare their max/mins
// use reduce??
// I'm confused!!
}
}
/* Settings for Lancaster Airport */
//RWY 8
let lat8 : Double = 40.119946033333335
let lon8 : Double = 76.30404113333333
//RWY 26
let lat26 : Double = 40.12708346666667
let lon26 : Double = 76.2810583
//RWY 13
let lat13 : Double = 40.12317425
let lon13 : Double = 76.30378541666667
//RWY 31
let lat31 : Double = 40.11767828333333
let lon31 : Double = 76.29098628333334
var lancaster = Airport(name: "KLNS")
let Runway8_26 = Runway(Name: "8", Lat: lat8, Lon: lon8, Name: "26", Lat: lat26, Lon: lon26)
let Rnway13_31 = Runway(Name: "13", Lat: lat13, Lon: lon13, Name: "31", Lat: lat31, Lon: lon31)
lancaster.addRunway(Runway8_26);
lancaster.addRunway(Rnway13_31);
lancaster.getMaxLat()
最佳答案
您几乎在那里:
func getMaxLat() -> Double {
return runways.reduce(-DBL_MAX, combine: {
max($0, $1.maxLat)
})
}
Combine闭包中的
$0
是减少的当前结果,在您的情况下为Double
,而不是数组元素。因此,您的代码中的
$0.maxLat
是错误的。以
-DBL_MAX
而不是0.0
开头可确保计算出最大值即使所有纬度均为负,也正确。
关于ios - 快速进行功能计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27062974/