3 回答
TA贡献1827条经验 获得超4个赞
使用sort.Slice(自 Go 1.8 起可用)或sort.Sort函数对值的切片进行排序。
通过这两个函数,应用程序提供了一个函数来测试一个切片元素是否小于另一个切片元素。要先按姓氏再按名字排序,请先比较姓氏然后是名字:
if members[i].LastName < members[j].LastName {
return true
}
if members[i].LastName > members[j].LastName {
return false
}
return members[i].FirstName < members[j].FirstName
使用带有 sort.Slice 的匿名函数指定 less 函数:
var members []Member
sort.Slice(members, func(i, j int) bool {
if members[i].LastName < members[j].LastName {
return true
}
if members[i].LastName > members[j].LastName {
return false
}
return members[i].FirstName < members[j].FirstName
})
less 函数是通过带有 sort.Sort 函数的接口指定的:
type byLastFirst []Member
func (members byLastFirst) Len() int { return len(members) }
func (members byLastFirst) Swap(i, j int) { members[i], members[j] = members[j], members[i] }
func (members byLastFirst) Less(i, j int) bool {
if members[i].LastName < members[j].LastName {
return true
}
if members[i].LastName > members[j].LastName {
return false
}
return members[i].FirstName < members[j].FirstName
}
sort.Sort(byLastFirst(members))
除非性能分析表明排序是一个热点,否则请使用对您的应用程序最方便的函数。
TA贡献1851条经验 获得超5个赞
sort.Slice像这样使用较新的函数:
sort.Slice(members, func(i, j int) bool {
switch strings.Compare(members[i].FirstName, members[j].FirstName) {
case -1:
return true
case 1:
return false
}
return members[i].LastName > members[j].LastName
})
或类似的东西。
TA贡献1802条经验 获得超5个赞
另一种模式,我觉得它稍微干净一点:
if members[i].LastName != members[j].LastName {
return members[i].LastName < members[j].LastName
}
return members[i].FirstName < members[j].FirstName
- 3 回答
- 0 关注
- 173 浏览
添加回答
举报