Ce face strings.Map
strings.Map(mapping, s) trece prin fiecare caracter (rune) din s, cheamă mapping și pune în rezultat caracterul returnat. Dacă funcția returnează o valoare negativă (de obicei -1), caracterul este eliminat.
Este potrivită pentru transformări caracter cu caracter: scoaterea diacriticelor, păstrarea doar a cifrelor, cifrul lui Cezar. Funcția primește caracterul întreg, deci lucrează corect și cu litere pe mai mulți octeți.
Parametri
| Parametru | Descriere |
|---|---|
mapping |
Funcția aplicată fiecărui caracter; returnează caracterul nou sau -1 pentru ștergere. |
s |
Textul inițial. |
Ce returnează
Textul transformat.
Exemple
Exemplul 1: Doar cifrele dintr-un număr de telefon
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
doarCifre := func(r rune) rune {
if unicode.IsDigit(r) {
return r
}
return -1
}
fmt.Println(strings.Map(doarCifre, "+40 (721) 000-111"))
}
Rezultat
40721000111
Exemplul 2: Scoaterea diacriticelor
package main
import (
"fmt"
"strings"
)
func faraDiacritice(r rune) rune {
switch r {
case 'ă', 'â':
return 'a'
case 'î':
return 'i'
case 'ș':
return 's'
case 'ț':
return 't'
case 'Ă', 'Â':
return 'A'
case 'Î':
return 'I'
case 'Ș':
return 'S'
case 'Ț':
return 'T'
}
return r
}
func main() {
s := "Învățăm în Pitești și în Brașov"
fmt.Println(strings.Map(faraDiacritice, s))
}
Rezultat
Invatam in Pitesti si in Brasov
Greșeli frecvente
- Returnezi
0ca să ștergi un caracter. 0 este caracterul NUL și rămâne în text; pentru ștergere returnează-1. - Folosești Map pentru înlocuiri de cuvinte. Map lucrează caracter cu caracter; pentru texte folosește
strings.ReplaceAllsaustrings.NewReplacer.
Comenzi înrudite
strings.ReplaceAll: Înlocuiește toate aparițiile unui text cu altul (ReplaceAll) sau doar primele n (Replace).strings.ToUpper: Returnează textul scris cu litere mari (ToUpper) sau mici (ToLower), inclusiv diacriticele.unicode.ToUpper: Transformă un singur caracter în literă mare, mică sau în forma de titlu; celelalte caractere rămân neschimbate.