range を使用して配列/スライス/マップおよびチャネルの要素を変更する方法

PHPz
リリース: 2023-04-05 10:38:55
オリジナル
800 人が閲覧しました

Golang プログラミングを使用する場合、配列、スライス、マップ、チャネルなどのデータ構造を走査するために使用される range キーワードをよく使用します。ただし、走査プロセス中に、走査された要素を変更したい場合、いくつかの問題が発生します。この記事では、range を使用して配列、スライス、マップ、チャネルの要素を変更する方法について説明します。

  1. 配列要素とスライス要素を変更する

配列とスライスを走査する場合、range キーワードは要素自体ではなく要素のコピーを返します。したがって、要素を変更したい場合は、要素のポインタを使用する必要があります。以下は、配列要素とスライス要素を変更するコード例です。

arr := [3]int{1, 2, 3}
for i := range arr {
  temp := &arr[i]
  *temp = *temp*2
}

slice := []int{1, 2, 3}
for i := range slice {
  temp := &slice[i]
  *temp = *temp*2
}
ログイン後にコピー

一時変数 temp は、要素のポインターを保存し、ポインターを介して要素の値を変更するためにコード内で使用されます。

  1. マップ要素の変更

マップを移動する場合、range キーワードは要素自体ではなく、キーと値のペアのコピーを返します。したがって、要素を変更したい場合は、キーを使用して要素にアクセスし、その値を変更する必要があります。以下は、マップ要素を変更するコード例です。

oldMap := map[string]int{"a": 1, "b": 2, "c": 3}
newMap := make(map[string]int)
for k, v := range oldMap {
  newMap[k] = v*2
}
ログイン後にコピー

コードでは、マップを移動するときに、キーを使用して要素にアクセスし、その値を変更します。マップ内の要素の値を変更するときにポインターを使用する必要がないことに注意してください。

  1. チャネル内の要素を変更する

チャネルを移動する場合、range キーワードは要素自体ではなく、要素のコピーを返します。したがって、チャネル内の要素を変更する場合は、チャネルの送信操作を使用してチャネル内の値を変更する必要があります。以下は、チャネル内の要素を変更するコード例です。

ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3

for i := range ch {
  ch <- i*2
}
ログイン後にコピー

コードでは、チャネルの送信操作を使用して、要素の値を元の値の 2 倍に変更します。チャネル内の要素を変更する場合、チャネルの送信操作を使用して、変更された値をチャネルに送信する必要があることに注意してください。

概要:

range キーワードを使用して配列、スライス、マップ、チャネルを走査する場合、走査された要素を変更したい場合は、要素のポインタ (配列とスライス)、キーを使用して要素 (マップ) にアクセスするか、チャネルの送信操作を使用して要素の値 (チャネル) を変更します。 range を使用して要素を変更する場合は、ループ内で無限ループや競合状態などの問題が発生しないように注意する必要があることに注意してください。

以上がrange を使用して配列/スライス/マップおよびチャネルの要素を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート