我正在编写不同的调度算法,并希望比较各种排序工作方式。我在结构上有一个函数,我希望传递一个排序接口类型的类型,供函数中的排序使用。
type Schedule struct {
Jobs []Job
}
type ByDifference []Job
// ByDifference implements sort.Interface
type ByRatio []Job
// ByRatio implements sort.Interface
func (s *Schedule) Schedule(OrderBy sort.Interface) {
// Summation variables omitted
// This fails as there is no function OrderBy()
sort.(OrderBy(q.Jobs))
for _, v := range q.Jobs {
// Compute weighted sum omitted
}
// Output code omitted
}
当然,我想调用Schedule函数并传递ByDifference或ByRatio的一些表示,并使用该类型进行排序。我的初步阅读似乎导致了类型反思。是否可以使用此设计传递实现接口的类型,以便在函数中使用sort?
答案 0 :(得分:2)
也许这样
type Schedule struct {
Jobs []Job
}
const(
Difference=iota
Ratio=iota
)
type ByDifference Schedule
// ByDifference implements sort.Interface
type ByRatio Schedule
// ByRatio implements sort.Interface
func (s *Schedule) Schedule(order int) { // s.Schedule(Difference) for example
// Summation variables omitted
switch order{
case Difference: ss:= ByDifference(*s); sort(ss); s=&Schedule(ss)
case Ratio: ss:= ByRatio(*s); sort(ss); s=&Schedule(ss)
}
for _, v := range s.Jobs {
// Compute weighted sum omitted
}
// Output code omitted
}