为了账号安全,请及时绑定邮箱和手机立即绑定

如何将排序接口实现类型作为函数参数传递?

如何将排序接口实现类型作为函数参数传递?

Go
Smart猫小萌 2021-09-27 10:03:55
我正在编写不同的调度算法,并想比较订购作业的各种方式。我在结构上有一个函数,我想传递排序接口类型的类型以供函数内的排序使用。type Schedule struct {    Jobs []Job}type ByDifference []Job// ByDifference implements sort.Interfacetype ByRatio []Job// ByRatio implements sort.Interfacefunc (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 使用的接口?
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

也许这样


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


}


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信