一个数字+字母的排序小巧思

问题

项目中有这样一种场景,服装在每个月都有不同的波段进行标识:即1月有1A、1B、1C、1D,2月有2A、2B、2C、2D依次类推,现在需要按照月份排序并且按照波段排序

常规思路

func TestSort(t *testing.T) {
  // 字符串
  monthSlice := []string{"8A", "8B", "8C", "8D", "10A", "10B", "10C", "10D", "9A", "9B", "6A", "6B", "6C", "6D", "7A", "7B", "7C", "7D", "12A", "12B", "12C", "12D", "1A", "1B", "1C", "1D", "2A", "2B", "2C", "2D", "4A", "4B", "4C", "4D", "3A", "3B", "3C", "3D", "5A", "5B", "5C", "5D", "9C", "9D", "11A", "11B", "11C", "11D"}
  // 排序
  sort.Strings(monthSlice)
  t.Log(monthSlice)

}

结果

[10A 10B 10C 10D 11A 11B 11C 11D 12A 12B 12C 12D 1A 1B 1C 1D 2A 2B 2C 2D 3A 3B 3C 3D 4A 4B 4C 4D 5A 5B 5C 5D 6A 6B 6C 6D 7A 7B 7C 7D 8A 8B 8C 8D 9A 9B 9C 9D]

换一种思路

提示:这里将月份波段分为两部分,然后分别进行排序,最后再将结果合并


func TestSort(t *testing.T) {
  // 字符串
  monthSlice := []string{"8A", "8B", "8C", "8D", "10A", "10B", "10C", "10D", "9A", "9B", "6A", "6B", "6C", "6D", "7A", "7B", "7C", "7D", "12A", "12B", "12C", "12D", "1A", "1B", "1C", "1D", "2A", "2B", "2C", "2D", "4A", "4B", "4C", "4D", "3A", "3B", "3C", "3D", "5A", "5B", "5C", "5D", "9C", "9D", "11A", "11B", "11C", "11D"}
  // 排序
  minMonthSlice := make([]string, 0, 64) // 小月份
  maxMonthSlice := make([]string, 0, 16) // 大月份
  resultMonthSlice := make([]string, 0, 128)
  for _, s := range monthSlice {
    if len(s) == 3 {
      maxMonthSlice = append(maxMonthSlice, s)
    } else {
      minMonthSlice = append(minMonthSlice, s)
    }
  }
  // 对两个部分分别排序
  sort.Strings(minMonthSlice)
  sort.Strings(maxMonthSlice)
  // 组合起来
  minMonthSlice = append(minMonthSlice, maxMonthSlice...)
  resultMonthSlice = minMonthSlice
  t.Log(resultMonthSlice)

}

结果

[1A 1B 1C 1D 2A 2B 2C 2D 3A 3B 3C 3D 4A 4B 4C 4D 5A 5B 5C 5D 6A 6B 6C 6D 7A 7B 7C 7D 8A 8B 8C 8D 9A 9B 9C 9D 10A 10B 10C 10D 11A 11B 11C 11D 12A 12B 12C 12D]

你可能感兴趣的:(golang,sort排序,后端)