• 我有一个由2个点组成的结构(跑道)-在这种情况下为纬度/经度。
  • 我有一个连接多个跑道的机场
  • 我想快速计算所有元素的边界框

  • 我相信我可以使用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/

    10-10 02:21