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

 

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