我相信我可以使用reduce功能,但我并不是100%清楚如何做到这一点。我失败的尝试是:
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()
答案 0 :(得分:1)
你快到了那里:
func getMaxLat() -> Double {
return runways.reduce(-DBL_MAX, combine: {
max($0, $1.maxLat)
})
}
组合闭包中的 $0
是缩减的当前结果,在您的情况下是Double
,而不是数组元素。
因此,代码中的$0.maxLat
是错误的。
从-DBL_MAX
开始而不是0.0
,可确保计算最大值
即使所有纬度都是负数,也要正确。