package main
import (
"fmt"
"math"
)
func main() {
data := map[string]float32{"co": 0.76, "o3": 14.39, "aqi": 60.5, "no2": 29.17, "so2": 5.48, "pm10": 71.01, "pm2_5": 35.26}
//data := map[string]float32{"co": 0, "o3": 3000, "aqi": 60.5, "no2": 29.17, "so2": 5.48, "pm10": 71.01, "pm2_5": 35.26}
var AQGrades = map[string][8]int{
"so2": {0, 150, 500, 650, 800, 1600, 2100, 2620},
"no2": {0, 100, 200, 700, 1200, 2340, 3090, 3840},
"pm10": {0, 50, 150, 250, 350, 420, 500, 600},
"pm2_5": {0, 35, 75, 115, 150, 250, 350, 500},
"co": {0, 5, 10, 35, 60, 90, 120, 150},
"o3": {0, 160, 200, 300, 400, 800, 1000, 1200},
"aqi": {0, 50, 100, 150, 200, 300, 400, 500},
}
var pollutants= [...] string{"so2", "no2", "pm10", "pm2_5", "co", "o3"}
var IAQIS = make(map[string] int)
for _, pollutant := range pollutants {
standPollutantData := AQGrades[pollutant]
length := len(standPollutantData)
pollutantData := data[pollutant]
if pollutantData <= 0 {
IAQIS[pollutant] = 0
} else if pollutantData >= float32(standPollutantData[length-1]){
IAQIS[pollutant] = 500
} else {
var index int
for key, standData := range standPollutantData {
if float32(standData)>= pollutantData || length-1==key{
index = key
break
}
}
if index != 0 {
highAqi := float32(AQGrades["aqi"][index])
lowAqi := float32(AQGrades["aqi"][index-1])
highStand := float32(standPollutantData[index])
lowStand := float32(standPollutantData[index-1])
IAQIS[pollutant] = int(math.Ceil(float64((highAqi-lowAqi)/(highStand-lowStand)*(pollutantData-lowStand)+lowAqi)))
//IAQIS[pollutant] = (highAqi-lowAqi)/(highStand-lowStand)*(pollutantData-lowStand)+lowAqi
}
}
}
fmt.Println(IAQIS)
//var AQI = map[string] int{}
maxData := 0
primary_pollutant := map[int][]string{}
for key, value := range IAQIS{
if value>maxData{
maxData = value
}
dataValue, exit := primary_pollutant[value]
if !exit{
//primary_pollutant[value] = []string{}
}
primary_pollutant[value] = append(dataValue, key)
//b := map[string]int{"aqi": 61, "pollutants": ["pm10"]}
}
if maxData <= AQGrades["aqi"][1]{
primary_pollutant[maxData] = []string{}
}
fmt.Println(primary_pollutant)
fmt.Println(maxData, primary_pollutant[maxData])
}
网友评论