'Swift: Suggestions to make a better/faster lookup

I am creating a dataset (from terrain data) that I visualise in Google Earth by generating a KML file. Part of the KML creation assigns a colour to a polygon based on a data value in the dataset.

My code is 'ugly' (I wrote it in a hurry as I just needed something that 'worked') and the lookup function getPolyStyle to find the colour to assign to the polygon is not very efficient.

Any suggestions on a better way to do this?

struct KMLPolyStyle: Codable {
  let color: String?
  let outline: Int?
  let fill: Int?
}

let surfacePolyStyles :[Range<Double>:KMLPolyStyle] = [-90.0 ..< -5.0: KMLPolyStyle(color: "7fbf3f00", outline: 0, fill: nil),
                                                        -5.0 ..< -2.5: KMLPolyStyle(color: "7fbf5f00", outline: 0, fill: nil),
                                                        -2.5 ..< 0.0:  KMLPolyStyle(color: "7fbf7f00", outline: 0, fill: nil),
                                                        0.0 ..< 2.5:   KMLPolyStyle(color: "7f7fbf00", outline: 0, fill: nil),
                                                        2.5 ..< 5.0:   KMLPolyStyle(color: "7f3fff00", outline: 0, fill: nil),
                                                        5.0 ..< 5.5:   KMLPolyStyle(color: "7f38f213", outline: 0, fill: nil),
                                                        5.5 ..< 6.0:   KMLPolyStyle(color: "7f32e526", outline: 0, fill: nil),
                                                        6.0 ..< 6.5:   KMLPolyStyle(color: "7f2cd839", outline: 0, fill: nil),
                                                        6.5 ..< 7.0:   KMLPolyStyle(color: "7f25cb4c", outline: 0, fill: nil),
                                                        7.0 ..< 7.5:   KMLPolyStyle(color: "7f1fbf5f", outline: 0, fill: nil),
                                                        7.5 ..< 8.0:   KMLPolyStyle(color: "7f19b272", outline: 0, fill: nil),
                                                        8.0 ..< 8.5:   KMLPolyStyle(color: "7f12a585", outline: 0, fill: nil),
                                                        8.5 ..< 9.0:   KMLPolyStyle(color: "7f0c9898", outline: 0, fill: nil),
                                                        9.0 ..< 9.5:   KMLPolyStyle(color: "7f068bab", outline: 0, fill: nil),
                                                        9.5 ..< 10.0:  KMLPolyStyle(color: "7f007fbf", outline: 0, fill: nil),
                                                        10.0 ..< 11.0: KMLPolyStyle(color: "7f0078c5", outline: 0, fill: nil),
                                                        11.0 ..< 12.0: KMLPolyStyle(color: "7f0072cb", outline: 0, fill: nil),
                                                        12.0 ..< 13.0: KMLPolyStyle(color: "7f006bd2", outline: 0, fill: nil),
                                                        13.0 ..< 14.0: KMLPolyStyle(color: "7f0065d8", outline: 0, fill: nil),
                                                        14.0 ..< 15.0: KMLPolyStyle(color: "7f005fdf", outline: 0, fill: nil),
                                                        15.0 ..< 16.0: KMLPolyStyle(color: "7f0058e5", outline: 0, fill: nil),
                                                        16.0 ..< 17.0: KMLPolyStyle(color: "7f0052eb", outline: 0, fill: nil),
                                                        17.0 ..< 18.0: KMLPolyStyle(color: "7f004bf2", outline: 0, fill: nil),
                                                        18.0 ..< 19.0: KMLPolyStyle(color: "7f0045f8", outline: 0, fill: nil),
                                                        19.0 ..< 20.0: KMLPolyStyle(color: "7f003fff", outline: 0, fill: nil),
                                                        20.0 ..< 21.0: KMLPolyStyle(color: "7f2a34ff", outline: 0, fill: nil),
                                                        21.0 ..< 22.0: KMLPolyStyle(color: "7f552aff", outline: 0, fill: nil),
                                                        22.0 ..< 23.0: KMLPolyStyle(color: "7f7f1fff", outline: 0, fill: nil),
                                                        23.0 ..< 24.0: KMLPolyStyle(color: "7faa15ff", outline: 0, fill: nil),
                                                        24.0 ..< 25.0: KMLPolyStyle(color: "7fd40aff", outline: 0, fill: nil),
                                                        25.0 ..< 90.0: KMLPolyStyle(color: "7fff00ff", outline: 0, fill: nil)]

func getPolyStyle(for maskAngle: Double) -> KMLPolyStyle {
  var polyStyle = surfacePolyStyles[-90 ..< -5.0]
  for style in surfacePolyStyles {
    if style.key.contains(maskAngle) {
      polyStyle = surfacePolyStyles[style.key]
      break
    }
  }
  return polyStyle!
}



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source