var a int = 100
var b int = 200
var t int
t = a
a = b
b = t
fmt.Println(a, b)
コンピュータが最初に発明されたとき、メモリは非常に「高価」でした。この変数の交換は、多くの場合非常に贅沢です。そこで、コンピューター「大きな牛」は、中間変数の使用を避けるためにいくつかのアルゴリズムを発明しました。
var a int = 100
var b int = 200
a = a ^ b
b = b ^ a
a = a ^ b
fmt.Println(a、b)
このようなアルゴリズムは多数ありますが、それらのすべてに特定の値の範囲と型の要件があります。
Go 言語に関しては、メモリはもはや希少なリソースではなく、記述方法もより簡単になります。 Go の「複数代入」機能を使用すると、変数交換のタスクを簡単に完了できます。
var a int = 100(変数aに100を代入)
var b int = 200(変数bに200を代入)
b、a = a、b(aとbの値を入れ替える)
fmt.Println(a、b)(aとbの値を出力する)
多重代入では、変数の左右の値が左から右の順に代入されます。
複数の代入は、Go 言語のエラー処理と関数の戻り値で頻繁に使用されます。たとえば、ソートに Go 言語を使用する場合、swap を使用する必要があります。コードは次のとおりです。
type IntSlice []int
func (p IntSlice) Len() int { return len(p) } // 要素数を返します
func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] } // i 番目の要素が j 番目の要素より小さければ true を返します
func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } // i 番目と j 番目の要素を交換します
コードの説明は次のとおりです。
- 1 行目では、IntSlice を []int 型であると宣言しています。
- 3 行目で、IntSlice 型の Len メソッドを記述し、スライスの長さを指定します。
- 4 行目では、指定された i および j 要素インデックスに従って要素を取得して比較し、比較結果を返します。
- 5 行目では、指定された i、j 要素のインデックスに従って、2 つの要素の値を交換します。