-
GCT1015
使用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 []Membersort.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 []Memberfunc (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))除非性能分析表明排序是一个热点,否则请使用对您的应用程序最方便的函数。
-
江户川乱折腾
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})或类似的东西。
-
12345678_0001
另一种模式,我觉得它稍微干净一点:if members[i].LastName != members[j].LastName { return members[i].LastName < members[j].LastName}return members[i].FirstName < members[j].FirstName