𦫠БамоΡΡΠΈΡΠ΅Π»Ρ ΠΏΠΎ Go Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ . Π§Π°ΡΡΡ 7. ΠΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠ»Π°ΠΉΡΡ. Append ΠΈ Ρopy. ΠΠ°ΠΊΠ΅Ρ slices
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈ ΡΠ»Π°ΠΉΡΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ Go, ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ append ΠΈ copy, ΠΈΠ·ΡΡΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ slices ΠΈ ΠΏΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ ΡΠ΅ΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ.
ΠΠ°ΡΡΠΈΠ²Ρ
ΠΠ°ΡΡΠΈΠ²Ρ Π² Go ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΎΠ½ Π² Π½Π΅ΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π² Go:
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
var
ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
var arr1 [2]int arr1[0] = 0 arr1[1] = 1 var users [2]string users[0] = "ΠΠ΅ΡΡ" users[1] = "ΠΠΎΡΠ°"
- Π‘ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:
arr2 := [3]int{0, 1, 2}
- Π‘ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ:
arr3 := [...]bool{true, false, true}
- ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ N-ΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΡΠΈΠΏ ΠΈ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
{}
ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
arrND := [len1][len2][len3]....[lenN]T{}
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:
arr2D := [2][2]int{ {1, 2}, {3, 4}, } fmt.Println(arr2D) // [[1 2] [3 4]]
Π‘ΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°:
arr3 := [3]int{1, 2, 3} arr4 := [3]int{1, 2, 3} fmt.Println(arr3 == arr4) // true // ΠΎΡΠΈΠ±ΠΊΠ°: ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΡ Π΄Π»ΠΈΠ½Ρ arr1 := [3]int{1, 2, 3} arr2 := [2]int{1, 2} fmt.Println(arr1 == arr2) // mismatched types [3]int and [2]int
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅:
arr := [3]string{"alpha", "beta", "gamma"} for ind, val := range arr { fmt.Printf("ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ %d: %s\\n", ind, val) } // ΠΡΠ²ΠΎΠ΄: // ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0: alpha // ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1: beta // ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 2: gamma
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ len()
Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°:
for i := 0; i < len(arr); i++ { fmt.Printf("ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ %d: %s\\n", i, arr[i]) }
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΈΡ
Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠΎΠ±ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ index out of range:
// ΠΎΡΠΈΠ±ΠΊΠ° - index out of range [3] with length 3 arr := [3]string{"alpha", "beta", "gamma"} for i := 0; i < 4; i++ { fmt.Printf("ΠΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ %d: %s\\n", i, arr[i]) }
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π² Go
Π Go ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π»ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΡΠΎΠΊΠ°Ρ .
Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ, ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ. Π ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ ΠΌΠ°ΡΡΠΈΠ² result
ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ changeArray
, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Π½Π°Π΄ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ arr
, Π° result
ΠΎΡΡΠ°Π΅ΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
func changeArray(arr [3]int, elem int) { for i := 0; i < len(arr); i++ { arr[i] += elem } } func main() { result := [3]int{1, 2, 3} changeArray(result, 100) fmt.Println(result) // 1 2 3 }
ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° result
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ changeArrayPtr
, ΠΊΠΎΡΠΎΡΠ°Ρ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ changeArray
, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ², Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π³ΠΎ:
func changeArrayPtr(arr *[3]int, elem int) { for i := 0; i < len(arr); i++ { arr[i] += elem } } func main() { arr := [3]int{1, 2, 3} changeArrayPtr(&arr, 100) // ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ fmt.Println(arr) // 101 102 103 }
Π‘Π»Π°ΠΉΡΡ
Π‘Π»Π°ΠΉΡ β ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Go ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Ρ ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΠΌΠΈ:
type slice struct { array unsafe.Pointer // ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΌΠ°ΡΡΠΈΠ² len int // Π΄Π»ΠΈΠ½Π° cap int // Π΅ΠΌΠΊΠΎΡΡΡ }
ΠΠ· ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ»Π°ΠΉΡ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ , Π° Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°ΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ.
ΠΠ»ΠΈΠ½Π° ΡΠ»Π°ΠΉΡΠ° (len) β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π½Π΅ΠΌ.
ΠΠΌΠΊΠΎΡΡΡ ΡΠ»Π°ΠΉΡΠ° (cap) β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π² ΡΠ»Π°ΠΉΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Π΅ΠΌΠΊΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π»ΠΈΠ½Ρ, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π°ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
var
ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ nil-ΡΠ»Π°ΠΉΡ:
var s1 []int
- ΠΠΎΡΠΎΡΠΊΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅:
s2 := []string{"a", "b"}
- Π‘ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ
make
. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅ΠΌΠΊΠΎΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅:
s3 := make([]int, 3) // Π°Π½Π°Π»ΠΎΠ³ []int{0, 0, 0}
- Π‘ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
, ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈ ΡΠΌΠΊΠΎΡΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ
make
:
s4 := make([]int, 3, 5) // Π°Π½Π°Π»ΠΎΠ³ new([5]int)[:3]
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠ° ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°:
arr := [2]bool{true, false} s5 := arr[:] // ΡΡΠ΅Π· ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ
- Π‘ΠΎΠ·Π΄Π°ΡΡ n-ΠΌΠ΅ΡΠ½ΡΠΉ ΡΠ»Π°ΠΉΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² ΡΠΈΠΊΠ»Π΅
for
:
slice2D := make([][]int, 3) for i := range slice2D { slice2D[i] = make([]int, 3) slice2D[i][i] = 1 } fmt.Println(slice2D) // [[1 0 0] [0 1 0] [0 0 1]]
Π‘ΡΠ΅Π·
Π‘ΡΠ΅Π· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ»Π°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ°ΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΡΠ»Π°ΠΉΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ :
slc := []int{1, 2, 3, 4, 5} part := slc[0:2] // ΡΠ»Π°ΠΉΡ []int{1, 2}
Π‘Π»Π°ΠΉΡ ΠΈ ΡΡΠ΅Π· ΡΠ°ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π² ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΠΏΠΎΠ΄ Π½ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΌΠ°ΡΡΠΈΠ², Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈ Π΅ΠΌΠΊΠΎΡΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠ±ΠΈΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ ΡΠ»Π°ΠΉΡΠΎΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², Π° ΡΡΠ΅Π·ΠΎΠΌ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΡΠ»Π°ΠΉΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ [:]
.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ»Π°ΠΉΡΠΎΠ² Π² Go
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ ΠΈ ΡΡΠ΅Π·Π°ΠΌΠΈ ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Ρ ΡΠ°Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΡΠ»Π°ΠΉΡΠ°.
ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
func main() { first := []int{1, 2, 3} second := first // []int{1, 2, 3} third := first[0:2] // []int{1, 2} second[0] = 10 third[1] = 20 fmt.Println(first, second, third) // ΠΡΠ²ΠΎΠ΄: // [10 20 3] [10 20 3] [10 20] second = append(second, 60) // ΡΠ΅ΠΏΠ΅ΡΡ second Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° first second[0] = 30 fmt.Println(first, second, third) // ΠΡΠ²ΠΎΠ΄: // [10 20 3] [30 20 3 60] [10 20] }
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ»Π°ΠΉΡΠ°Ρ
second
ΠΈ third
ΠΊΠΎΡΠ½ΡΠ»ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ»Π°ΠΉΡΠ° first
. ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΈΡΠ»Π° 60 Π² ΡΠ»Π°ΠΉΡ second
ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π°Π»Π»ΠΎΡΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° first
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΊΠΎΡΠ½Π΅ΡΡΡ ΡΠ»Π°ΠΉΡΠΎΠ² first
ΠΈ third
, ΡΡΠΎ Π²ΠΈΠ΄Π½ΠΎ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π²ΡΠ²ΠΎΠ΄Π΅.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ»Π°ΠΉΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΠ»Π°ΠΉΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΎΠ½ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π΄Π°Π½Π½ΡΡ .
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°Π³Π»ΡΠ΄Π½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ. ΠΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΠ»Π°ΠΉΡ nums
Π² ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ doubleNumbers
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄Π²ΠΎΠ΅ ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π»ΠΈΠ½Ρ Π½Π° 2.
func doubleNumbers(slc []int) { for i := range slc { slc[i] *= 2 } slc = slc[0 : len(slc)-2] } func main() { nums := []int{1, 2, 3, 4} doubleNumbers(nums) fmt.Println(nums, len(nums), cap(nums)) // [2 4 6 8] 4 4 }
ΠΠ°ΠΊ Π½Π΅ΡΡΡΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ nums
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΈΡΡ Π² Π΄Π²Π° ΡΠ°Π·Π°, Π° Π²ΠΎΡ Π΄Π»ΠΈΠ½Π° ΠΎΡΡΠ°Π»Π°ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ doubleNumbers
ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ newNums
:
func doubleNumbers(slc []int) []int { for i := range slc { slc[i] *= 2 } slc = slc[0 : len(slc)-2] return slc } func main() { nums := []int{1, 2, 3, 4} newNums := doubleNumbers(nums) fmt.Println(nums, newNums) fmt.Println("len nums:", len(nums), "cap nums:", cap(nums)) fmt.Println("len newNums:", len(newNums), "cap newNums:", cap(newNums)) // [2 4 6 8] [2 4] // len nums: 4, cap nums: 4 // len newNums: 2, cap newNums: 4 }
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π°ΠΉΡ nums
Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠ²ΡΡ Π΄Π»ΠΈΠ½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡΡ Π² newNums
.
ΠΠ»ΠΈΠ½Π° ΡΠ»Π°ΠΉΡΠ° nums
ΠΎΡΡΠ°Π»Π°ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π»Π°ΡΡ Π΅Ρ ΠΊΠΎΠΏΠΈΡ, Π° Π½Π΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π». ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π»ΠΈΠ½Ρ, Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
Append
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ»Π°ΠΉΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ append
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ:
func append(s []T, vs ...T) []T
ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ»Π°ΠΉΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ. Π ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ:
arr := []int{1, 2, 3} arr = append(arr, 4) arr = append(arr, 5, 6) fmt.Println(arr) // [1 2 3 4 5 6] arr = append(arr, "string") // ΠΎΡΠΈΠ±ΠΊΠ°
Π Go Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
slc1 := []int{10, 11, 12} slc2 := []int{13, 14, 15} slc1 = append(slc1, slc2...) fmt.Println(slc1) // [10 11 12 13 14 15] slc3 := append([]int(nil), slc2...) // ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ slc2 slc2 = append(slc2, slc2...) // Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ slc2 Π² ΠΊΠΎΠ½Π΅Ρ slc2 fmt.Println(slc2, slc3) // [13 14 15 13 14 15] [13 14 15]
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ append
ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΡΠ°Π΅Ρ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π°ΠΉΡ. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ Π΅ΠΌΠΊΠΎΡΡΠΈ:
func main() { var slc = make([]int, 5) fmt.Printf("old address: %p\\n", slc) // ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ fmt.Println("len:", len(slc), "cap:", cap(slc)) // 5 5 slc = append(slc, 1) fmt.Printf("new address: %p\\n", slc) // Π½ΠΎΠ²ΡΠΉ Π°Π΄ΡΠ΅Ρ fmt.Println("len:", len(slc), "cap:", cap(slc)) // 6 10 }
Π ΠΊΠΎΠ΄Π΅ Π²ΡΡΠ΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ append
Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π° Π΅ΠΌΠΊΠΎΡΡΡ ΡΠ»Π°ΠΉΡΠ° slc
, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π²Π΄Π²ΠΎΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° slc
Π½Π° Π½ΠΎΠ²ΡΠΉ.
Π€ΡΠ½ΠΊΡΠΈΡ append
Π½Π°ΠΏΡΡΠΌΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ Π»ΠΈΡΠ½ΠΈΡ
Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΠΈ Π½Π΅Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π΅ΠΌΠΊΠΎΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ
ΡΠ»Π°ΠΉΡΠΎΠ².
Copy
ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ copy
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ:
func copy(dst, src []Type) int
ΠΠ½Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ° Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ· len(dst)
ΠΈ len(src)
.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ copy
:
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠ° Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² ΡΠ»Π°ΠΉΡ Ρ ΠΌΠ΅Π½ΡΡΠΈΠΌ:
slc := []int{1, 2} n3 := copy(slc, []int{3, 4, 5}) fmt.Println(n3, slc) // 2 [3, 4]
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠ° ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² ΡΠ»Π°ΠΉΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ:
slc := []int{1, 2, 3, 4} n3 := copy(slc, []int{5, 6}) fmt.Println(n3, slc) // 2 [5, 6, 3, 4]
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠ° Π² ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ:
slc := []int{1, 2, 3, 4} n2 := copy(slc, slc[2:]) fmt.Println(n2, slc) // 2 [3 4 3 4]
- ΠΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ β ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΎΠ² ΡΡΡΠΎΠΊΠΈ Π² ΡΠ»Π°ΠΉΡ Π±Π°ΠΉΡΠΎΠ².
s := "example" bytes := make([]byte, 3) copy(bytes, s) fmt.Println(bytes, string(bytes)) // [101 120 97] exa copy(bytes, s[3:]) fmt.Println(bytes, string(bytes)) // [109 112 108] mpl
ΠΠ°ΠΊΠ΅Ρ slices
Π Π²Π΅ΡΡΠΈΠΈ 1.21 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Go Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ slices
, ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎ ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ, ΡΡΠΎ Π² ΡΠ°Π·Ρ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ²ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΠΈΡΡ, ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ»Π°ΠΉΡΠ΅ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° slices
:
// Π΄ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° slices: slc := []int{5, 9, 1, 100} max := slc[0] for _, val := range slc { if val > max { max = val } } // ΠΏΠ°ΠΊΠ΅Ρ slices: max := slices.Max(slc)
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° slices
:
- Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ»Π°ΠΉΡΠ° β
slices.Sort
:
slc := []int{4, 3, 5, 2, 6, 1} slices.Sort(slc) // [1 2 3 4 5 6]
- Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΡΠΎΠ² β
slices.Compare
:
slc1 := []int{1, 2, 7, 3} slc2 := []int{2, 3, 1, 7} fmt.Println(slices.Compare(slc1, slc2)) // -1
- ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠ»Π°ΠΉΡΠ΅ β
slices.Contains
:
slc := []int{1, 2, 7, 3} fmt.Println(slices.Contains(slc, 1)) fmt.Println(slices.Contains(slc, 4))
- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [i:j] ΠΈΠ· ΡΠ»Π°ΠΉΡΠ° β
slices.Delete
:
slc := []int{1, 2, 7, 3} slc = slices.Delete(slc, 0, 2) fmt.Println(slc) // [7, 3]
- ΠΡΡΠ°Π²ΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° β
slices.Insert
:
letters := []string{"alpha", "delta"} letters = slices.Insert(letters, 1, "beta", "gamma") fmt.Println(letters)
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° slices ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅ go.
ΠΠ°Π΄Π°ΡΠΈ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π·Π°Π΄Π°Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠ»Π°ΠΉΡΡ Π΄Π»Ρ ΠΎΡΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Π½Π°Π²ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΡΡΠ°ΡΡΠΈ. ΠΠ»Ρ ΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ·ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ slices
, math
ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
Π‘Π°ΠΌΡΠΉ Ρ ΠΎΡΠΎΡΠΈΠΉ Π΄ΠΎΠΌ
ΠΠ° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»ΠΈΡΠ΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΡΠΎΡΡ n
Π΄ΠΎΠΌΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Π΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ° ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ»ΠΈΡΡ (ΠΎΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠ»Π΅Π²Π°). ΠΡΠΈ ΡΡΠΎΠΌ Π½ΠΎΠΌΠ΅ΡΠ° Π΄ΠΎΠΌΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ. ΠΠ°Π·ΠΎΠ²Π΅ΠΌ Ρ
ΠΎΡΠΎΡΠΈΠΌ Π΄ΠΎΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΠΈΠΉΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Π½Π°ΡΠ°Π»Ρ ΡΠ»ΠΈΡΡ. ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° β Π²ΡΠ²Π΅ΡΡΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ°.
ΠΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΏΠΎΠ΄Π°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΠ΅Π» β Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ n (n < 1000), Π½Π° Π²ΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ±Π΅Π» ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π΄ΠΎΠΌΠΎΠ² Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ -10^4 Π΄ΠΎ 10^4.
ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: Π΄Π²Π° ΡΠΈΡΠ»Π° β Π½ΠΎΠΌΠ΅Ρ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ Π΄ΠΎΠΌΠ°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π·Π°Π΄Π°ΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΌΠ°ΡΡΠΈΠ²Π°.
func main() { var n int fmt.Scan(&n) nums := make([]int, n) for i := range nums { fmt.Scan(&nums[i]) } var maxValue = -10001 var maxIndex = -10001 for i := range nums { if nums[i] > maxValue { maxValue = nums[i] maxIndex = i } } fmt.Println(maxValue, maxIndex) }
ΠΠΎΡΠ° ΠΈΡΠ΅Ρ ΡΠ΅Π΄ΠΊΠΈΠ΅ ΡΠΈΡΠ»Π°
ΠΠΎΡΠ° Π²ΡΠ΅ΡΡΡΠ· ΡΠ²Π»Π΅ΠΊΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎΠΉ ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» ΡΠ΅Π±Π΅ ΡΠ°ΠΊΡΡ Π·Π°Π΄Π°ΡΡ: Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Π΄ΠΎΡΠΊΠ΅ n
ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» ΠΈ Π½Π°ΠΉΡΠΈ ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ
ΡΠ°ΠΌΡΠ΅ ΡΠ΅Π΄ΠΊΠΈΠ΅, ΡΠΎ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅, ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠΌΠΎΡΡ ΠΠΎΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ²ΠΎΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π² ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
ΠΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΏΠΎΠ΄Π°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΠ΅Π» β Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ n (n < 10^6), Π½Π° Π²ΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ±Π΅Π» ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°.
ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΡΠΈΡΠ»Π°, Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΠ΅ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
Π Π΅ΡΠ΅Π½ΠΈΠ΅:
func main() { var n int fmt.Scan(&n) nums := make([]int, n) for i := range nums { fmt.Scan(&nums[i]) } var cnt int // ΡΡΠ΅ΡΡΠΈΠΊ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΌΠ°ΡΡΠΈΠ² for i := range nums { cnt = 0 // ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° for j := range nums { // Π΅ΡΠ»ΠΈ Π΄Π²Π° ΡΠΈΡΠ»Π° Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΡΠΎΠ²ΠΏΠ°Π»ΠΈ if nums[i] == nums[j] && i != j { cnt++ // ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° } } // Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π² // ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ if cnt == 0 { fmt.Println(nums[i]) } } }
ΠΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΠ΅Π΄Π΅ΠΉ
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ shiftNeighbour(nums []int)
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ»Π°ΠΉΡΠ°. ΠΠ»Ρ Π½Π΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΈΠ· Π½ΠΈΡ
ΠΎΡΡΠ°Π΅ΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
nums1 := []int{1, 2, 3, 4} shiftNeighbour(nums1) fmt.Println(nums1) // [2 1 4 3] nums2 := []int{9, 8, 10} shiftNeighbour(nums2) fmt.Println(nums2) // [8 9 10]
Π Π΅ΡΠ΅Π½ΠΈΠ΅:
func shiftNeighbour(nums []int) { for i := 1; i < len(nums); i += 2 { tmp := nums[i] nums[i] = nums[i-1] nums[i-1] = tmp } }
Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΄Π²ΠΈΠ³ ΡΠ»Π°ΠΉΡΠ°*
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ sliceShift(nums []int, shift int) []int
Π΄Π»Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π²ΠΈΠ³Π° ΡΠ»Π°ΠΉΡΠ° Π½Π° shift ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²ΠΏΡΠ°Π²ΠΎ, Π΅ΡΠ»ΠΈ shift > 0, ΠΈ Π²Π»Π΅Π²ΠΎ, Π΅ΡΠ»ΠΈ shift < 0.
ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ° ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠ°ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ copy()
.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠ΄Π²ΠΈΠ³ ΠΊ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅. ΠΡΠ»ΠΈ shift > 0, ΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π·ΡΡΡ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΄Π²ΠΈΠ³Π° Π½Π° len(nums). Π ΡΠ»ΡΡΠ°Π΅ shift < 0 Π·Π°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠ΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ ΡΠ°Π²Π΅Π½ ΡΠ΄Π²ΠΈΠ³Ρ Π²ΠΏΡΠ°Π²ΠΎ Π½Π° len(nums) + shift, ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ. ΠΠ°Π»Π΅Π΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π°ΠΉΡ ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΠ΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ:
func sliceShift(nums []int, shift int) []int { ln := len(nums) shift %= ln if shift < 0 { // ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π° ΠΊ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ shift = -shift shift %= ln shift = ln - shift } res := make([]int, ln) copy(res[shift:], nums[:ln-shift]) copy(res[:shift], nums[ln-shift:]) return res }
ΠΠΎΠ΄Π²Π΅Π΄ΡΠΌ ΠΈΡΠΎΠ³ΠΈ
ΠΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠ»Π°ΠΉΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΌΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅ΠΊΡΡΠ° Π·Π°Π΄Π°Ρ. ΠΠ°ΡΡΠΈΠ²Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠ»Π°ΠΉΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠΈΠΊΠ»Π° ΠΏΠΎΠ³ΡΡΠ·ΠΈΠΌΡΡ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ, Π±Π°ΠΉΡΠΎΠ², ΡΡΠ½, ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ
- ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΡΡΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Go, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°, Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
- Π Π΅ΡΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Go Ρ Π½ΡΠ»Ρ
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠ°ΠΊΠ΅ΡΡ, ΠΈΠΌΠΏΠΎΡΡΡ, ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠ²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ°.
- ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. Π’ΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ if-else ΠΈ switch-case. Π¦ΠΈΠΊΠ» for. ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π Π΅ΠΊΡΡΡΠΈΡ. Defer
- ΠΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΠ»Π°ΠΉΡΡ. Append ΠΈ Ρopy. ΠΠ°ΠΊΠ΅Ρ slices
- Π‘ΡΡΠΎΠΊΠΈ, ΡΡΠ½Ρ, Π±Π°ΠΉΡΡ. ΠΠ°ΠΊΠ΅Ρ strings. Π₯Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ° (map)
- Π‘ΡΡΡΠΊΡΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ. ΠΡΠ½ΠΎΠ²Ρ ΠΠΠ
- ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ°Π½ΠΈΠΊΠ°. ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ
- Π Π°Π±ΠΎΡΠ° Ρ Π΄Π°ΡΠΎΠΉ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ. ΠΠ°ΠΊΠ΅Ρ time
- ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ. Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. ΠΠ°ΠΊΠ΅ΡΡ io, bufio, os
- ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ. ΠΠΎΡΡΡΠΈΠ½Ρ. ΠΠ°Π½Π°Π»Ρ
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ Π²ΠΈΠ΄Ρ. Table-driven ΠΏΠΎΠ΄Ρ ΠΎΠ΄. ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ
- ΠΡΠ½ΠΎΠ²Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΡΠ΅ΠΊ TCP/IP. Π‘ΠΎΠΊΠ΅ΡΡ. ΠΠ°ΠΊΠ΅Ρ net
- ΠΡΠΎΡΠΎΠΊΠΎΠ» HTTP. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ HTTP-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ°ΠΊΠ΅Ρ net/http