040_関数を使用したソートのカスタマイズ

1094 ワード

コードのデモ:
package main

import "fmt"
import "sort"

type ByLength []string

func (s ByLength) Len() int {
	return len(s)
}

func (s ByLength) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

func (s ByLength) Less(i, j int) bool {
	return len(s[i]) < len(s[j])
}

func main() {
	fruits := []string{"peach", "banana", "kiwi"}
	sort.Sort(ByLength(fruits))
	fmt.Println(fruits)
}

  
コード実行結果:
[kiwi peach banana]

  
コード解読:
  • では、カスタマイズされた方法でソートされる場合があります.カスタムソートを実現するにはsortインタフェースのLen,Less,Swapメソッド
  • を実現する必要がある.
  • これによりsortパケットの一般的な方法Sortを用いて
  • のカスタムソートを実現することができる.
  • LenとSwapメソッドの実装は、異なるタイプの間でほぼ同じであり、Lessメソッドのみがカスタムソートロジックを含み、この例では文字列長昇順で
  • をソートする.
  • 本例では、内蔵文字列スライスをソートするためにByLengthタイプを定義し、最終的にfruitsをByLengthタイプに変換してSortを用いてソート
  • を行う.
  • goのスライスをカスタムソートする方法は、1.カスタムソートタイプを実装します.2.sortパケットを実現するSortメソッドLen,SwapおよびLess;3.sortを使用する.Sortメソッドによる
  • のソート