ホームページ  >  記事  >  バックエンド開発  >  golang スライスのリバース

golang スライスのリバース

PHPz
PHPzオリジナル
2023-05-16 19:18:071565ブラウズ

Go 言語でよく使用されるスライスは、簡単に追加、削除、変更できる動的配列です。ただし、スライス要素を反転する必要がある場合があります。たとえば、{1, 2, 3, 4, 5} を {5, 4, 3, 2, 1} に反転します。この記事では、Go 言語を使用して実装する方法を紹介します。スライス、リバース。

  1. ループを使用して実現する

スライスの反転とは、実際にはスライスの要素を逆の順序で配置することであり、これはループを使用して実現できます。具体的な方法は、スライスの最初の要素を最後に移動し、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]
  1. 標準ライブラリを使用します。実装する関数

ループの使用に加えて、標準ライブラリにはスライスを反転する関数も提供されています。この関数は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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。