தொகுதி பாடங்கள் (2/5)
துண்டுகள்: இடியோமாடிக் அமைப்பு
ஒரு ஸ்லைஸ் என்பது Goவில் அதிகம் பயன்படுத்தப்படும் தரவு அமைப்பு: ஒரு டைனமிக் பார்வை
ஒரு அடிப்படை வரிசைக்கு மேல். தொடரியல்: []T. வரிசைகள் போலல்லாமல், நீளம்
வகையின் ஒரு பகுதியாக இல்லை, மேலும் நீங்கள் அதை append மூலம் வளர்க்கலாம்.
ஒரு துண்டு உடற்கூறியல்
உள்நாட்டில் ஒரு ஸ்லைஸ் என்பது மூன்று புல அமைப்பு:
- அடிப்படை வரிசையில் உள்ள முதல் உறுப்புக்கு சுட்டி
- ஒரு நீளம் (
len): காணக்கூடிய உறுப்புகளின் எண்ணிக்கை - ஒரு ** கொள்ளளவு** (
cap): பார்வையின் தொடக்கத்திலிருந்து கிடைக்கும் கூறுகள் அடிப்படை வரிசையின் இறுதி வரை
s := []int{10, 20, 30}
fmt.Println(len(s), cap(s)) // 3 3உருவாக்கம்
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 appendappend: எப்போதும் முடிவை ஒதுக்கவும்
append கூறுகளைச் சேர்த்து புதிய ஸ்லைஸை (சாத்தியமாக) வழங்குகிறது
திறன் போதுமானதாக இல்லாவிட்டால் புதிய வரிசையை ஒதுக்குதல்):
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 வரை (பிரத்தியேகமாக) ஒரு துணைப் பகுதியைப் பிரித்தெடுக்கிறது:
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 இலும் தெரியும்.
பிட்ஃபால்: வரிசை பகிர்வு
s := []int{1, 2, 3, 4}
sub := s[0:2]
sub[0] = 99
fmt.Println(s) // [99 2 3 4] — modified!சுயாதீன நகலைப் பெற, copy அல்லது append ஐப் பயன்படுத்தவும்:
out := make([]int, len(sub))
copy(out, sub)முயற்சி செய்து பாருங்கள்
[1, 2, 3] உடன் ஒரு ஸ்லைஸை உருவாக்கவும் மற்றும் 4 ஐச் சேர்க்க append ஐப் பயன்படுத்தவும்.
குறிப்பைக் காட்டு
எப்போதும் `s` க்கு மீண்டும் சேர்ப்பதன் முடிவை ஒதுக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
இன்டெக்ஸ் 1 இலிருந்து 3 பிரத்தியேகமான (அதாவது [20, 30]) வரையிலான உறுப்புகளைப் பிரித்தெடுக்க ஸ்லைஸ் எக்ஸ்ப்ரெஷனைப் பயன்படுத்தவும்.
குறிப்பைக் காட்டு
தொடரியல்: `s[start:end]`, `start` உட்பட, `end` பிரத்தியேக.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
இவற்றில் எதை எழுதுவது தவறு?
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ஸ்லைஸ் = படிக்க/வரம்பு/சேர்க்க சரி; பூஜ்ய வரைபடத்திலிருந்து முற்றிலும் வேறுபட்டது.