Go-da sətir üzərində təkrarlama zamanı hansı nüanslar var?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da sətir üzərində təkrarlama zamanı, sətirin Unicode simvolları deyil, baytların ardıcıllığı olduğunu nəzərə almaq vacibdir. unicode/utf8 paketi çoxbaytlı UTF-8 ardıcıllıqları ilə işləmək üçün funksiyalar təqdim edir.
Əsas nöqtələr:
-
Baytlar üzrə təkrarlama:
for i := 0; i < len(s); i++döngüsü fərdi baytlar üzərində təkrarlanır. Əgər sətir çoxbaytlı simvollar ehtiva edirsə, bir simvol bir neçə baytla təmsil oluna bilər.// Baytlar üzrə nümunə str := "Привет" for i := 0; i < len(str); i++ { println(str[i]) // baytları çıxarır, simvolları yox } -
Rünlər (Unicode kod nöqtələri) üzrə təkrarlama: Unicode simvolları ilə düzgün işləmək üçün
for index, ru := range sdöngüsündən istifadə etmək tövsiyə olunur. Bu, UTF-8 çoxbaytlı ardıcıllıqları ilə işləyən rünlər üzərində təkrarlanır.// Rünlər üzərində nümunə str := "Привет" for index, ru := range str { println(index, ru) // rünün başlanğıc indeksini və rünü (int32 kimi) çıxarır } -
Sətirin uzunluğu:
len(s)funksiyası baytların sayını, rünlərin sayını deyil, qaytarır. Rünlərin sayını almaq üçünutf8.RuneCountInString(s)istifadə edin.// Bayt və rün sayını hesablama nümunəsi str := "Привет" println("Baytların sayı:", len(str)) // baytların sayını göstərir println("Rünlərin sayı:", utf8.RuneCountInString(str)) // rünlərin sayını göstərir -
İndeksə görə giriş:
s[i]giriş i-ci baytı, rünü deyil. Birbaşa rünlərə indekslə giriş dəstəklənmir.// Bayta giriş nümunəsi str := "Привет" println(str[0]) // sətirin ilk baytını çıxarır, ilk rünü yox -
Sətirlərin dilimlənməsi: Sətir dilimləri də bayt səviyyəsində işləyir.
s[i:j]yeni bayt dilimi yaradır.// Baytlar üzrə dilim nümunəsi str := "Привет" println(str[0:2]) // ilk iki baytı göstərə bilər, əgər ilk iki bayt tam rünü təşkil etmirsə
Unicode ilə etibarlı işləmək üçün Go-da range ilə iterasiya və unicode/utf8 paketindən funksiyaların istifadəsini tövsiyə edirəm.