dongmaijie5200 2015-03-22 15:41
浏览 82
已采纳

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

I am writing different scheduling algorithm and would like to compare various ways of ordering jobs. I have a function on a struct that I would like to pass the type of a sort interface type to be used by the sort within the function.

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

}

Naturally, I would like to to call the Schedule function and pass some representation of ByDifference or ByRatio and have the sort use that type. My initial reading seems to lead to type reflection. Is it possible to use this design to pass a type that implements an interface to be used by sort within a function?

  • 写回答

1条回答 默认 最新

  • dougaoxian8922 2015-03-22 20:43
    关注

    Maybe this way

    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
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥15 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)