முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 2 இன் 5பாடத்திட்டத்தில் 17/50~15 min
தொகுதி பாடங்கள் (2/5)

துண்டுகள்: இடியோமாடிக் அமைப்பு

ஒரு ஸ்லைஸ் என்பது Goவில் அதிகம் பயன்படுத்தப்படும் தரவு அமைப்பு: ஒரு டைனமிக் பார்வை ஒரு அடிப்படை வரிசைக்கு மேல். தொடரியல்: []T. வரிசைகள் போலல்லாமல், நீளம் வகையின் ஒரு பகுதியாக இல்லை, மேலும் நீங்கள் அதை append மூலம் வளர்க்கலாம்.

ஒரு துண்டு உடற்கூறியல்

உள்நாட்டில் ஒரு ஸ்லைஸ் என்பது மூன்று புல அமைப்பு:

  • அடிப்படை வரிசையில் உள்ள முதல் உறுப்புக்கு சுட்டி
  • ஒரு நீளம் (len): காணக்கூடிய உறுப்புகளின் எண்ணிக்கை
  • ஒரு ** கொள்ளளவு** (cap): பார்வையின் தொடக்கத்திலிருந்து கிடைக்கும் கூறுகள் அடிப்படை வரிசையின் இறுதி வரை
Go
s := []int{10, 20, 30}
fmt.Println(len(s), cap(s)) // 3 3

உருவாக்கம்

Go
a := []int{1, 2, 3}          // literal
b := make([]int, 3)          // [0 0 0]   len=3 cap=3
c := make([]int, 3, 10)      // len=3 cap=10 (reserved)
var d []int                  // nil slice: len=0 cap=0, still usable with append

append: எப்போதும் முடிவை ஒதுக்கவும்

append கூறுகளைச் சேர்த்து புதிய ஸ்லைஸை (சாத்தியமாக) வழங்குகிறது திறன் போதுமானதாக இல்லாவிட்டால் புதிய வரிசையை ஒதுக்குதல்):

Go
s := []int{1, 2, 3}
s = append(s, 4)              // [1 2 3 4]
s = append(s, 5, 6, 7)        // append multiple elements
s = append(s, altra...)       // concatenate another slice (spread)

ஸ்லைஸ் வெளிப்பாடு s[a:b]

a (உள்ளடக்கம்) இலிருந்து b வரை (பிரத்தியேகமாக) ஒரு துணைப் பகுதியைப் பிரித்தெடுக்கிறது:

Go
s := []int{10, 20, 30, 40, 50}
sub := s[1:4]              // [20 30 40]
inizio := s[:2]            // [10 20]
fine := s[3:]              // [40 50]
intera := s[:]             // [10 20 30 40 50]

துணை ஸ்லைஸ்கள் அடிப்படை வரிசையைப் பகிரவும் அசல் ஸ்லைஸுடன்: sub[i] = ... மூலம் ஏற்படும் பிறழ்வுகள் s இலும் தெரியும்.

பிட்ஃபால்: வரிசை பகிர்வு

Go
s := []int{1, 2, 3, 4}
sub := s[0:2]
sub[0] = 99
fmt.Println(s)             // [99 2 3 4] — modified!

சுயாதீன நகலைப் பெற, copy அல்லது append ஐப் பயன்படுத்தவும்:

Go
out := make([]int, len(sub))
copy(out, sub)

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#go.m4.l2.e1
முயற்சிகள்: 0ஏற்றுகிறது…

[1, 2, 3] உடன் ஒரு ஸ்லைஸை உருவாக்கவும் மற்றும் 4 ஐச் சேர்க்க append ஐப் பயன்படுத்தவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

எப்போதும் `s` க்கு மீண்டும் சேர்ப்பதன் முடிவை ஒதுக்கவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#go.m4.l2.e2
முயற்சிகள்: 0ஏற்றுகிறது…

இன்டெக்ஸ் 1 இலிருந்து 3 பிரத்தியேகமான (அதாவது [20, 30]) வரையிலான உறுப்புகளைப் பிரித்தெடுக்க ஸ்லைஸ் எக்ஸ்ப்ரெஷனைப் பயன்படுத்தவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

தொடரியல்: `s[start:end]`, `start` உட்பட, `end` பிரத்தியேக.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m4.l2.e3
தயார்

இவற்றில் எதை எழுதுவது தவறு?

Go
s := []int{1, 2, 3}
// (a) s = append(s, 4)
// (b) append(s, 4)
பதில் விருப்பங்கள்

மறுபரிசீலனை

  • []T: ஒரு வரிசையின் மீது மாறும் காட்சி; மூன்று (ptr, len, cap).
  • make([]T, len, cap) முன் ஒதுக்கீடு செய்ய; var s []T பயன்படுத்தக்கூடிய பூஜ்ய துண்டு.
  • s = append(s, ...): எப்போதும் முடிவை ஒதுக்கவும்.
  • s[a:b] அடிப்படை வரிசையைப் பகிர்ந்து கொள்கிறது: copy(...) சுயாதீன நகல்களுக்கு.
  • A nil ஸ்லைஸ் = படிக்க/வரம்பு/சேர்க்க சரி; பூஜ்ய வரைபடத்திலிருந்து முற்றிலும் வேறுபட்டது.