本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Sort.Reverse in Go》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容我正在查看
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Sort.Reverse in Go》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
问题内容我正在查看 sort.reverse
代码:
type reverse struct {
// This embedded Interface permits Reverse to use the methods of
// another Interface implementation.
Interface
}
// Less returns the opposite of the embedded implementation's Less method.
func (r reverse) Less(i, j int) bool {
return r.Interface.Less(j, i)
}
// Reverse returns the reverse order for data.
func Reverse(data Interface) Interface {
return &reverse{data}
}
据我了解,reverse
实现了 interface
(并覆盖 less
),而 *reverse
没有实现 interface
。为什么 reverse
返回 *reverse
(不知为何是 interface
)?
对于您的评论:
golang 中没有方法重写。它不会覆盖 less
。它正在实现 interface
的 less
,它是 interface
类型:
type interface 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)
}
对于所提出的问题:
因为要更改数据的顺序,所以它应该是反向结构的地址。这就是为什么它是 *reverse
。现在您可以传递任何实现 interface
接口的类型。为了实现 interface
,您应该实现 interface
中定义的所有方法。
type intslice []int
func (p intslice) len() int { return len(p) }
func (p intslice) less(i, j int) bool { return p[i] < p[j] }
func (p intslice) swap(i, j int) { p[i], p[j] = p[j], p[i] }
在上面的例子中,您可以看到 intslice
实现了 interface
。因此,您可以将 intslice
作为参数传递给 reverse。
作为示例,您还可以使用 float
值来实现:
package main
import (
"fmt"
"sort"
)
func main() {
//s := []int{5, 2, 6, 3, 1, 4} // unsorted
s1 := []float64{5.2, 2.6, .6, .03, 2.1 } // unsorted
sort.Sort(sort.Reverse(sort.Float64Slice(s1)))
fmt.Println(s1)
}
Playground example
今天关于《Sort.Reverse in Go》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!
--结束END--
本文标题: Sort.Reverse in Go
本文链接: http://www.lsjlt.com/news/595855.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0