Exemplul 1: Golang Sort Slice în ordine crescătoare
Funcția „sort.Slice()” este cea mai importantă funcție din Go care rearanjează elementele feliei în ordine crescătoare sau descrescătoare. Luați în considerare următoarea ilustrație în care felia este aranjată în ordine crescătoare:
pachet principalimport (
'fmt'
'fel'
)
func principal () {
evenSlice := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( „Felie nesortată:” , evenSlice )
fel . Felie ( evenSlice , func ( i , j int ) bool {
întoarcere evenSlice [ i ] < evenSlice [ j ]
})
fmt . Println ( „Felie sortată:” , evenSlice )
}
La începutul funcției main(), definim felia evenSlice cu valorile {10, 2, 8, 4, 0, 6}. Această felie reprezintă o colecție de numere pare care sunt inițial nesortate. Pentru a sorta felia evenSlice, funcția sort.Slice() este folosită împreună cu felia. În cadrul funcției sort.Slice(), este furnizată o funcție de sortare ca argument. Această funcție determină ordinea de sortare prin compararea celor două elemente ale feliei la indicii „i” și „j”. Dacă evenSlice[i] este mai mică decât evenSlice[j], returnează adevărat; în caz contrar, se întoarce false. Funcția sort.Slice() folosește această funcție de comparație pentru a rearanja elementele feliei „evenSlice” în ordine crescătoare.
Rezultatele feliei sortate în ordine crescătoare sunt generate în următorul ecran de ieșire:
Exemplul 2: Golang Sort Part Slice
Apoi, sortarea este aplicată sub-slice a feliei specificate în ordine crescătoare folosind funcția sort.Slice() din Go.
pachet principal
import (
'fmt'
'fel'
)
func principal () {
n := [] int { 9 , 7 , 3 , 5 }
start := 0
Sfârşit := 3
fel . Felie ( n [ start : Sfârşit ], func ( i , j int ) bool {
întoarcere n [ start + i ] < n [ start + j ]
})
fmt . Println ( n )
}
Inițial, creăm felia „n” cu valorile [9, 7, 3, 5]. În plus, două variabile, „start” și „end”, sunt setate la 0 și, respectiv, 3. Aceste variabile definesc intervalul de indici din secțiunea „n” care vor fi sortați. Funcția „sort.Slice()” este apoi apelată cu sub-slice „n[start:end]” ca prim argument. Această sub-slice conține elementele lui „n” în intervalul specificat. După aceea, o funcție de sortare este dată ca al doilea argument în interiorul funcției sort.Slice().
Aici, acea funcție primește doi indici, „i” și „j”, care reprezintă elementele din sub-slice. Pentru a compara elementele din sub-slice, funcția de sortare accesează elementele corespunzătoare din slice originală folosind startul offset.Compară n[start+i] și n[start+j] Apoi, funcția sort.Slice() folosește funcția de sortare furnizată pentru a rearanja elementele din sub-slice în ordine crescătoare.
Următoarea ieșire arată că elementele din intervalul specificat (de la început la sfârșit-1) sunt sortate, iar elementele din afara intervalului rămân neschimbate:
Exemplul 3: Golang Sort Integer Slice folosind funcția Sort.Ints().
Mai mult, cea mai convenabilă pentru sortarea feliilor de numere întregi este funcția sort.Ints() fără a fi nevoie de implementarea metodelor de sortare personalizate. Acționează direct asupra feliilor întregi și efectuează o sortare la loc. Următorul program sortează numerele întregi specificate:
pachet principalimport (
'fmt'
'fel'
)
func principal () {
IntSlice := [] int { 10 , 13 , cincisprezece , unsprezece , 14 , 12 }
fmt . Println ( „Felie nesortată:” , IntSlice )
fel . Ints ( IntSlice )
fmt . Println ( „Felie sortată:” , IntSlice )
}
Mai întâi, declarăm și inițializam felia „IntSlice” cu valorile [10, 13, 15, 11, 14, 12] care reprezintă o colecție de numere întregi care sunt inițial nesortate. Apoi, funcția sort.Ints() este apelată cu secțiunea „IntSlice” ca argument pentru a sorta „IntSlice”. Funcția sort.Ints() în acest caz sortează intern fiecare parte a feliei conform unui algoritm de sortare optimizat. Modifică direct felia originală, rearanjandu-și elementele într-o ordine sortată.
Următoarea ieșire arată mai întâi că felia nesortată este afișată mai întâi, urmată de felia sortată:
Exemplul 4: Golang Sort String Slice
Go oferă, de asemenea, funcția sort.Strings() a pachetului de sortare care este folosită pentru a sorta o felie de șiruri într-o anumită ordine. Aici, următorul program ajută la sortarea feliei de șiruri:
pachet principalimport (
'fmt'
'fel'
)
func principal () {
strSl := [] şir { 'golan' , 'piton' , 'java' , 'perl' , 'dactilografiat' }
fel . Siruri de caractere ( strSl )
fmt . Println ( strSl )
}
Am stabilit mai întâi porțiunea „strSl” cu valorile [„golang”, „python”, „java”, „perl”, „typescript”] care nu sunt sortate. După aceea, sortăm felia „strSl” cu funcția sort.Strings() care sortează elementele feliei în ordine lexicografică. Această funcție modifică direct felia originală, rearanjandu-și elementele în ordine sortată pe baza valorilor lor ASCII.
Ieșirea sortează porțiunea șirului în mod ascendent, așa cum este afișat în următorul:
Exemplul 5: Golang Check Sort Slice utilizând funcția IntAreSort().
Cu toate acestea, cu funcția sort.IntsAreSorted() a lui Go, putem verifica dacă o anumită felie de numere întregi este sortată în ordine crescătoare sau nu. Luați în considerare următorul exemplu de program al funcției IntAreSort() pentru felia dată:
pachet principalimport (
'fmt'
'fel'
)
func principal () {
sl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( „Feii:” )
fmt . Println ( „Felie nesortată:” , sl )
rezultat := fel . IntsAreSorted ( sl )
fmt . Println ( ' \n Rezultat:' )
fmt . Println ( 'Este dat Slice sortat?: ' , rezultat )
}
În primul rând, o porțiune nesortată de numere întregi aleatoare este definită ca „sl”. Această felie conține o colecție de numere întregi fără o anumită ordine. Apoi, apelăm funcția sort.IntsAreSorted() și trecem felia „sl” ca argument. Această funcție oferă un rezultat boolean care indică dacă intrarea secțiunii este sau nu aranjată în ordine crescătoare. Apoi, funcția fmt.Println() tipărește rezultatele care arată dacă felia dată este sortată sau nu pe baza valorii booleene returnate.
Ieșirea afișează false pentru ordinea de sortare a unei secțiuni de numere întregi, deoarece nu este sortată:
Exemplul 6: Golang Reverse Sort Slice
În plus, folosind funcțiile sortReverse() și sortStringSlice() din pachetul de sortare din Go, putem sorta invers o felie de șiruri. Următorul program demonstrează funcționarea funcției sort.Reverse():
pachet principalimport (
'fmt'
'fel'
)
func principal () {
vocalSlice := [] şir { 'Este' , 'A' , 'eu' , 'în' , 'O' }
fmt . Println ( „Înainte de a sorta :” , vocalSlice )
fel . Fel ( fel . Verso ( fel . StringSlice ( vocalSlice )))
fmt . Println ( „După sortare :” , vocalSlice )
}
Începem prin a defini o felie din șirul „vowelSlice” care conține vocalele „e”, „a”, „i”, „u” și „o”. Conținutul inițial al feliei de șiruri specificate este imprimat mai întâi utilizând funcția „printare”. În continuare, operația de sortare este efectuată folosind funcția sort.Sort() cu funcțiile sort.Reverse() și sort.StringSlice() ca argumente. Aici, „sort.Reverse()” creează un nou tip care inversează ordinea elementelor. Ia ca argument tipul „sort.StringSlice” care convertește vocalSlice într-un tip sortabil.
Rezultatul de aici afișează vocalele în ordine alfabetică inversă:
Concluzie
Am aprofundat în diverse funcții de sortare cu exemple care sortează felia furnizată. Am tratat, de asemenea, despre sortarea sub-slicelor și despre verificarea dacă o felie este deja sortată. Prin urmare, putem valorifica capacitățile pachetului de sortare pentru a aborda o gamă largă de provocări de sortare în proiectele lor Go.