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

如何将函数扩展到 Golang 中的导入类型

如何将函数扩展到 Golang 中的导入类型

Go
有只小跳蛙 2021-12-13 18:44:12
我有一个进口类型type ExternalType struct {   quantity int}type ExternalArray []*ExternalType我希望能够为 ExternalArray 实现排序接口,以便按数量对其进行排序。但是,我不确定我该怎么做?一个具体的例子是这样的:https://play.golang.org/p/bEPtJ8NHQK
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

在sort.Interface定义了三个方法必须实现:


// Len is the number of elements in the collection.

Len() int


// Less reports whether the element with

// index i should sort before the element with index j.

Less(i, j int) bool


// Swap swaps the elements with indexes i and j.

Swap(i, j int)

在这种情况下,这看起来像:


type ExternalType struct {

   quantity int

}


type ExternalArray []*ExternalType


func (ea ExternalArray) Len() int {

    return len(ea)

}


func (ea ExternalArray) Less(i, j int) bool {

    return ea[i].quantity < ea[j].quantity

}


func (ea ExternalArray) Swap(i, j int) {

    ea[i], ea[j] = ea[j], ea[i]

}

为了进行排序,您可以使用sort.Sort,例如:


arr := ExternalArray{

    &ExternalType{quantity: 33},

    &ExternalType{quantity: 44},

    &ExternalType{quantity: 22},

    &ExternalType{quantity: 11},

}


sort.Sort(arr)

// `arr` is now sorted :-)

这是操场上的一个工作示例。


查看完整回答
反对 回复 2021-12-13
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

在当前包中定义一个类型,该类型对与导入类型具有相同元素类型的切片进行排序:


type byQuantity []*pkg.ExternalType


func (a byQuantity) Len() int           { return len(a) }

func (a byQuantity) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

func (a byQuantity) Less(i, j int) bool { return a[i].Quantity < a[j].Quantity }

将导入的切片类型值转换为上面定义的类型并排序:


a := pkg.ExternalArray{{1}, {3}, {2}}

sort.Sort(byQuantity(a))

// a is now sorted by quantity

由于原始切片和转换后的切片共享相同的后备数组,因此对转换后的切片进行排序也会对原始切片进行排序。


查看完整回答
反对 回复 2021-12-13
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

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