Go 言語でよく使用されるスライスは、簡単に追加、削除、変更できる動的配列です。ただし、スライス要素を反転する必要がある場合があります。たとえば、{1, 2, 3, 4, 5} を {5, 4, 3, 2, 1} に反転します。この記事では、Go 言語を使用して実装する方法を紹介します。スライス、リバース。
スライスの反転とは、実際にはスライスの要素を逆の順序で配置することであり、これはループを使用して実現できます。具体的な方法は、スライスの最初の要素を最後に移動し、2 番目の要素を最後から 2 番目に移動するという具合です。スライスの長さが奇数の場合、中間要素を交換する必要がないことに注意してください。
以下は、ループを使用したコード実装です。
func reverse(s []int) { for i := 0; i < len(s)/2; i++ { j := len(s) - i - 1 s[i], s[j] = s[j], s[i] } }
コード内の reverse 関数は、int 型のスライスをパラメーターとして受け取り、スライスを反転します。まず、for ループを使用してスライスの要素の前半を走査し、それらを対応する最後の要素と交換します。スライスの最後の要素のインデックスは len(s)-1 であり、最後の要素のインデックスは i- に対応するため、インデックス j は len(s)-i-1 によって取得されることに注意してください。番目の要素は len(s) -i-1 です。スライス長が奇数の場合は、真ん中の要素を交換する必要はありません。
この関数を使用して、任意の長さの int 型スライスを反転します。たとえば:
func main() { s1 := []int{1,2,3,4,5} reverse(s1) fmt.Println(s1) s2 := []int{2,4,6,8,10,12} reverse(s2) fmt.Println(s2) }
出力結果は次のとおりです:
[5 4 3 2 1] [12 10 8 6 4 2]
ループの使用に加えて、標準ライブラリにはスライスを反転する関数も提供されています。この関数はsortパッケージで定義されており、次のように使用されます:
package main import ( "fmt" "sort" ) func main() { s1 := []int{1,2,3,4,5} sort.Slice(s1, func(i, j int) bool { return i > j }) fmt.Println(s1) s2 := []int{2,4,6,8,10,12} sort.Slice(s2, func(i, j int) bool { return i > j }) fmt.Println(s2) }
コード内のsort.Slice関数は2つのパラメータを受け取ります。最初のパラメータは反転するスライスで、2番目のパラメータは関数です。これは反転のルールを定義します。この関数では、i が j より大きい場合は true を返し、i と j を前方に交換する必要があることを示します。
sort.Slice 関数は、sort.Interface インターフェイスに準拠する型でのみ動作できるため、スライスの要素型は Len、Less、および Swap メソッドを実装する必要があることに注意してください。 int 型のスライスの場合、これらのメソッドが実装されているため、sort.Slice 関数を直接使用して逆の操作を実行できます。
sort.Slice 関数を使用してスライスを反転します。コードは次のとおりです:
[5 4 3 2 1] [12 10 8 6 4 2]
どちらの方法でも簡単にスライスを反転できます。どちらの方法を使用する必要がありますか?実際の状況。 1 回だけ反転する必要がある場合はループ方式を使用することをお勧めしますが、複数回反転する必要がある場合は、並べ替えルールを再利用して効率を向上できる sort.Slice 関数の使用を検討できます。
以上がgolang スライスのリバースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。