go 使用sort 进行多重排序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章