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

golang スライスの変更値

PHPz
PHPzオリジナル
2023-05-09 20:07:48719ブラウズ

Golang は、配列やスライスなどのデータ構造をサポートする静的型付けプログラミング言語です。 Golang では、スライスは動的配列に似た可変長シーケンスです。配列よりも柔軟性があり、事前にサイズを指定しなくても、実行時にサイズを拡大または縮小できます。

スライスを使用する場合、多くの場合、スライスの要素を変更する必要があります。この記事では、Golang でスライスの値を変更する方法について詳しく説明します。

スライスの宣言と初期化

Golang では、次のメソッドを使用してスライス変数を宣言および初期化できます:

// 声明一个切片
var slice []int

// 声明并初始化一个切片
slice := []int{1, 2, 3}

// 创建一个长度为5的切片
slice := make([]int, 5)

// 创建一个长度为5,容量为10的切片
slice := make([]int, 5, 10)

ご覧のとおり、Golang でスライスを作成するのは次のとおりです。とてもシンプルです。最初の 2 つの方法を使用して作成されたスライスの長さと容量は両方とも 3、つまり、要素の初期数は 3 です。 make 関数を使用すると、指定した長さと容量のスライスを作成できます。

スライスの値を変更する

Golang では、スライスの要素にインデックスによってアクセスできます。たとえば、スライスの最初の要素にアクセスするには、次のコードを使用できます:

slice := []int{1, 2, 3}
fmt.Println(slice[0]) // 输出1

スライスの値を変更したい場合は、インデックスによって変更できます:

slice := []int{1, 2, 3}
slice[0] = 4
fmt.Println(slice) // 输出[4 2 3]

ご覧のとおり、index メソッドを使用してスライスの最初の要素を変更し、それを 4 に更新します。

複数の要素を同時に変更したい場合は、for を使用してスライスをループし、各要素を変更します。

slice := []int{1, 2, 3}
for i := 0; i < len(slice); i++ {
   slice[i] = slice[i] * 2
}
fmt.Println(slice) // 输出[2 4 6]

ここでは、それぞれを乗算します。要素を 2 に変更し、変更されたスライスを出力します。

スライスの参照型の特徴

Golang では、スライスは値型ではなく参照型です。これは、スライスを引数として関数に渡すと、関数は元のスライスのコピーを作成するのではなく、元のスライスを直接操作することを意味します。

以下は例です:

func modifySlice(slice []int) {
    slice[0] = 10
}

func main() {
    slice := []int{1, 2, 3}
    fmt.Println(slice) // 输出[1 2 3]
    modifySlice(slice)
    fmt.Println(slice) // 输出[10 2 3]
}

この例では、スライスの最初の要素を変更するために modifySlice 関数を定義します。まず元のスライスを印刷し、次に modifySlice 関数を呼び出してスライスの値を変更し、スライスを再度印刷します。

スライス パラメーターを渡すと、関数は元のスライスの最初の要素を変更することに注意してください。これは、スライスが参照型であり、コピーではなく元のスライスのアドレスを渡すためです。

スライスの追加関数

Golang では、append 関数を使用してスライスに新しい要素を追加できます。 appendこの関数は、元のスライスを変更せずに新しいスライスを返します。

これは、append 関数を使用して要素をスライスに追加する例です:

slice := []int{1, 2, 3}
slice = append(slice, 4)
fmt.Println(slice) // 输出[1 2 3 4]

この例では、append 関数を使用します。値 4 をスライスの末尾に追加します。 append 関数の戻り値を元のスライスに割り当てていることに注意してください。これは、append 関数が元のスライスを変更するのではなく、新しいスライスを返すためです。

新しい要素をスライスに追加することに加えて、append 関数は複数の要素を追加することもできます:

slice := []int{1, 2, 3}
newSlice := []int{4, 5, 6}
slice = append(slice, newSlice...)
fmt.Println(slice) // 输出[1 2 3 4 5 6]

この例では、.. 演算子は、newSliceappend 関数に渡します。これは、newSlice 内のすべての要素を slice スライスの最後に追加するようにコンパイラーに指示します。

スライスの共有基礎配列特性

Golang では、スライスは同じ基礎配列を共有できます。これは、2 つのスライスが同じ基になる配列を共有している場合、一方のスライスが変更されると、もう一方のスライスの値も変更されることを意味します。

以下は、共有基底配列を使用した変更の例です:

slice := []int{1, 2, 3}
newSlice := slice[1:3]
newSlice[0] = 4
fmt.Println(slice)    // 输出[1 4 3]
fmt.Println(newSlice) // 输出[4 3]

この例では、元のスライスから派生した新しいスライス newSlice を作成します。 slice はインデックス 1 で始まり、インデックス 3 で終わります。次に、newSlice の最初の要素を設定して、slice 配列の値を変更します。

newSliceslice は同じ基になる配列を共有するため、newSlice の最初の要素を変更する場合、 の値に注意してください。スライスの2番目の要素も変更されます。

概要

Golang では、スライスは必要に応じて動的にサイズ変更できる便利なデータ構造です。スライスを使用する場合、スライスの要素値を変更する方法を知る必要があります。スライスの要素には、インデックスを使用して簡単にアクセスして変更できます。スライスを関数に渡すと、関数は元のスライスに対して直接動作します。さらに、スライスには基礎となる配列を共有するという特性もあり、これにも注意が必要です。

以上がgolang スライスの変更値の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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