<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Go 語言中排序的 3 種方法

      原文鏈接: Go 語言中排序的 3 種方法

      在寫代碼過程中,排序是經(jīng)常會遇到的需求,本文會介紹三種常用的方法。

      廢話不多說,下面正文開始。

      使用標(biāo)準(zhǔn)庫

      根據(jù)場景直接使用標(biāo)準(zhǔn)庫中的方法,比如:

      • sort.Ints
      • sort.Float64s
      • sort.Strings

      舉個例子:

      s := []int{4, 2, 3, 1}
      sort.Ints(s)
      fmt.Println(s) // [1 2 3 4]
      

      自定義比較器

      使用 sort.Slice 方法排序時,可以自定義比較函數(shù) less(i, j int) bool,這樣就可以根據(jù)需要按不同的字段進行排序。

      如果想要穩(wěn)定排序的話,就使用 sort.SliceStable 方法。

      舉個例子:

      family := []struct {
          Name string
          Age  int
      }{
          {"Alice", 23},
          {"David", 2},
          {"Eve", 2},
          {"Bob", 25},
      }
      
      // Sort by age, keeping original order or equal elements.
      sort.SliceStable(family, func(i, j int) bool {
          return family[i].Age < family[j].Age
      })
      fmt.Println(family) // [{David 2} {Eve 2} {Alice 23} {Bob 25}]
      

      自定義數(shù)據(jù)結(jié)構(gòu)

      使用 sort.Sort 或者 sort.Stable 方法,它們可以對任意實現(xiàn)了 sort.Interface 的數(shù)據(jù)結(jié)構(gòu)排序。

      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)
      }
      

      意思就是說,只要某一個數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了 Len() intLess(i, j int) boolSwap(i, j int) 這三個方法,那么就可以使用 sort.Sort 來排序。

      舉個例子:

      type Person struct {
          Name string
          Age  int
      }
      
      // ByAge implements sort.Interface based on the Age field.
      type ByAge []Person
      
      func (a ByAge) Len() int           { return len(a) }
      func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
      func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
      
      func main() {
          family := []Person{
              {"Alice", 23},
              {"Eve", 2},
              {"Bob", 25},
          }
          sort.Sort(ByAge(family))
          fmt.Println(family) // [{Eve 2} {Alice 23} {Bob 25}]
      }
      

      字典排序

      我們都知道,字典是無序的,具體原因可以看之前寫的這篇文章 Go 語言 map 如何順序讀取?

      如果想要字典按 key 或者 value 排序的話,可以這樣做。

      m := map[string]int{"Alice": 2, "Cecil": 1, "Bob": 3}
      
      keys := make([]string, 0, len(m))
      for k := range m {
          keys = append(keys, k)
      }
      sort.Strings(keys)
      
      for _, k := range keys {
          fmt.Println(k, m[k])
      }
      // Output:
      // Alice 2
      // Bob 3
      // Cecil 1
      

      以上就是本文的全部內(nèi)容,如果覺得還不錯的話歡迎點贊轉(zhuǎn)發(fā)關(guān)注,感謝支持。


      參考文章:

      推薦閱讀:

      posted @ 2023-08-18 20:08  yongxinz  閱讀(282)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲暴爽av人人爽日日碰| 深夜国产成人福利在线观看| 久久天天躁夜夜躁狠狠820175| 迁西县| 尤物yw193无码点击进入| 性男女做视频观看网站| 欧美XXXX黑人又粗又长| 国产一区二区三区在线观看免费| 国产一精品一av一免费| 久久综合免费一区二区三区| 永久免费在线观看蜜桃视频| 日本一区二区三区专线| 成人亚洲狠狠一二三四区| 中文字幕乱码人妻二区三区| 国产一区日韩二区欧美三区| 国产精品嫩草99av在线| 国产精品啪| 色伦专区97中文字幕| 日韩精品三区二区三区| 国产女人18毛片水真多1| 日本a在线播放| 美日韩精品综合一区二区| 亚洲av无码成人影院一区| 国产精品中文字幕日韩| 日韩av在线一区二区三区| 大陆一级毛片免费播放| 激情综合网五月婷婷| 国产高颜值不卡一区二区| 国产精品自在自线免费观看| 中文字幕乱偷无码av先锋蜜桃| 精品国产精品午夜福利| 国产精品亚洲综合色区丝瓜| 国产二区三区不卡免费| 国产成人综合网亚洲第一| 曰批免费视频播放免费| 亚洲曰韩欧美在线看片| 国产一二三五区不在卡| 沅江市| 武装少女在线观看高清完整版免费| 国产精品久久久久婷婷五月| 国产成人精品无码播放|