English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
スライスは似たようなタイプのストレージ要素であり、異なるタイプの要素は同じ可変長のシーケンスに格納することは許可されていません。スライスでは、Go言語が提供するcopy()関数スライスを別のスライスにコピーします。つまり、copy()関数を使用して、スライスの要素を別のスライスにコピーすることができます。
文法:
func copy(dst, src []Type) int
ここでは、ターゲットスライスを表し、をsrcソーススライスを表します。それはコピーする要素の数を返し、その数はをlen(dst)またはlen(src)の最小値。以下の给定の例を用いて、その使用方法を説明しましょう:
package main import "fmt" func main() { //スライスの作成 slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65} var slc2 []int slc3 := make([]int, 5) slc4 := []int{78, 50, 67, 77} //コピー前に fmt.Println("Slice_1:", slc1) fmt.Println("Slice_2:", slc2) fmt.Println("Slice_3:", slc3) fmt.Println("Slice_4:", slc4) //スライスをコピーします copy_1 := copy(slc2, slc1) fmt.Println("\nスライス:", slc2) fmt.Println("コピーされる要素の総数:", copy_1) copy_2 := copy(slc3, slc1) fmt.Println("\nスライス:", slc3) fmt.Println("コピーされる要素の総数:", copy_2) copy_3 := copy(slc4, slc1) fmt.Println("\nスライス:", slc4) fmt.Println("コピーされる要素の総数:", copy_3) //ここで混同しないように、上記の //slcをコピーしました4のソースコード行 //そのため、永続的な変更を行う、つまり // slc 4を含む[58 69 40 45] copy_4 := copy(slc1, slc4) fmt.Println("\nスライス:", slc1) fmt.Println("コピーされる要素の総数:", copy_4) }
出力:
Slice_1: [58 69 40 45 11 56 67 21 65] Slice_2: [] Slice_3: [0 0 0 0 0] Slice_4: [78 50 67 77] スライス: [] コピーされる要素の総数: 0 スライス: [58 69 40 45 11] コピーされる要素の総数: 5 スライス: [58 69 40 45] コピーされる要素の総数: 4 スライス: [58 69 40 45 11 56 67 21 65] コピーされる要素の総数: 4
使用方法:上記の例では、4つの整数型のスライスがあり、それらに対してコピー操作を実行しています:
copy 1:= copy(slc2, slc1):ここでは、slc2はターゲットスライスであり、1はソーススライスです。ここでは、slc2スライスの中でslc1スライスをコピーする際に、slc2がnilのスライスである場合、copyメソッドはソーススライスとターゲットスライスの最小の長さを返します。2、最小の長さが0です。
copy_2:= copy(slc3、slc1):ここでは、slc3はターゲットスライスであり、1はソーススライスです。 ここでは、slc3スライスが空のスライスであるため、copy()関数を使用して1スライスを3スライスを5からスライスをコピーする際に、そのスライスの長さが1スライスがコピーされました5個の要素をコピーできます、因为そのスライスの長さが5、したがって、 を保存できません5の要素です。
copy_3:= copy(slc4、slc1):ここでは、slc4はターゲットスライスであり、slc1はソーススライスです。copy()関数を使用してslc1 スライスをslc4 をコピーする際に、それがインデックス0から始まり、その中の4個の要素です。slcslc4 スライスの長さが4、したがって、それ以上の要素を保存できません4の要素です。
copy_4:= copy(slc1、slc4):ここでは、出力後、混乱を感じることがあります。上記のコード行のslc4を考慮します4が更新されました。したがって、現在のslc4個の要素がありますが、slc4の更新値です。したがって、現在のslc1個の要素がありますが、slc9個の要素があります。したがって、コピーする要素の合計数は4。
例2:
package main import "fmt" func main() { //ソーススライス slice_1 := []string{"w3codeboxs", "for", "w3codeboxs", "GFG"} //ターゲットスライスを作成します,make関数を使用します slice_2 := make([]string, 3) //コピー前 fmt.Println("Slice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) //にコピーします1をslice_2 Copy_1 := copy(slice_2, slice_1) fmt.Println("\nSlice_1: ", slice_1) fmt.Println("Slice_2: ", slice_2) fmt.Println("コピーされた要素数: ", Copy_1) //スライスをコピーします //コピー機能を使用します //コードが明確に見えます Copy_2 := copy(slice_1, []string{"123w3codeboxs", "gfg"}) fmt.Println("\nSlice_1 : ", slice_1) fmt.Println("コピーされた要素数:", Copy_2) }
出力:
Slice_1: [w3codeboxs for w3codeboxs GFG] Slice_2: [ ] Slice_1: [w3codeboxs for w3codeboxs GFG] Slice_2: [w3codeboxs for w3codeboxs] コピーされた要素数: 3 Slice_1: [123w3codeboxs gfg w3codeboxs GFG] コピーされた要素数: 2