1. ホーム
  2. go

[解決済み] Goで配列を反転させるにはどうしたらいいですか?

2022-02-02 15:45:50

質問

http://play.golang.org/p/W70J4GU7nA

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

func Reverse(data Interface) Interface の意味がわかりにくい。

配列を反転させるには?ソートする必要はありません。

どのように解決するのですか?

通常、整数の配列を並べ替えるには、配列の周りを IntSlice というメソッドを定義しています。 Len , Less および Swap . これらのメソッドは、順番に sort.Sort . 何 sort.Reverse を定義している既存の型を取るということです。 Len , Less および Swap を置き換えますが Less メソッドを、常に基礎となる Less :

type reverse struct {
    // This embedded Interface permits Reverse to use the methods of
    // another Interface implementation.
    Interface
}

// Less returns the opposite of the embedded implementation's Less method.
func (r reverse) Less(i, j int) bool {
    return r.Interface.Less(j, i)
}

// Reverse returns the reverse order for data.
func Reverse(data Interface) Interface {
    return &reverse{data}
}

というように書くと sort.Reverse(sort.IntSlice(s)) このように、新しい、「修正された」、このようなものを得ることができるのです。 IntSlice を持ち、その Less メソッドを置き換えます。ですから、もし sort.Sort を呼び出し、その上で Less の場合、降順にソートされます。