gpt4 book ai didi

go - 如何将排序接口(interface)实现类型作为函数参数传递?

转载 作者:IT王子 更新时间:2023-10-29 02:05:26 29 4
gpt4 key购买 nike

我正在编写不同的调度算法,想比较各种排序作业的方法。我在结构上有一个函数,我想传递排序接口(interface)类型的类型以供函数内的排序使用。

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 的一些表示,并让排序使用该类型。我最初的阅读似乎导致了类型反射(reflection)。是否可以使用此设计来传递实现接口(interface)的类型,以供函数内的排序使用?

最佳答案

也许是这样

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

}

关于go - 如何将排序接口(interface)实现类型作为函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196323/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com