type Combination struct {
Group string
OrderNo int32
Model []string // 3+3 3+1+2 7选择3
F float64
G float64
//专业覆盖率
ProfessionalRate float64
}
type CombinationSort struct {
combinationList []core.Combination
}
func (t CombinationSort) Len() int {
return len(t.combinationList)
}
func (t CombinationSort) Swap(i, j int) {
t.combinationList[i], t.combinationList[j] = t.combinationList[j], t.combinationList[i]
}
/*
1、将各组合根据组合的分数值F从小到大进行排序。
2、如果F值相等则根据组合的难度系数值G从小到大进行排序。
3、如果难道系数值也相等,根据所在省份专业覆盖率,从大到小排序。
4、假如出现极端情况,则学科组合默认排序展示。
*/
func (t CombinationSort) Less(i, j int) bool {
if t.combinationList[i].F != t.combinationList[j].F {
return t.combinationList[i].F < t.combinationList[j].F
}
if t.combinationList[i].G != t.combinationList[j].G {
return t.combinationList[i].G < t.combinationList[j].G
}
if t.combinationList[i].ProfessionalRate != t.combinationList[j].ProfessionalRate {
return t.combinationList[i].ProfessionalRate > t.combinationList[j].ProfessionalRate
}
if t.combinationList[i].OrderNo != t.combinationList[j].OrderNo {
return t.combinationList[i].OrderNo < t.combinationList[j].OrderNo
}
return false
}
//实际排序使用
//四重重排序选出最合适的选科组合
sort.Sort(CombinationSort{combinationArray})