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})