如何在遍歷 a 的單個字符中“反轉范圍” string?
例如,給定s := "some string \u1222 whatever"- 我想做類似的事情:
for i, v := ~reverse~ range s {
}
請注意,我對通過標準庫的解決方案感興趣,而不必自己撰寫函式。我知道大量現有的圖書館可以做到這一點,但這無關緊要。此外 - 我不能使用len(s)和做:
for i := len(s) - 1; i >= 0; i-- {
}
因為在 Go 中內置len函式只回傳字串中的位元組數(不適用于非 ASCII 字串)。由于上述原因,我也不能做指令提供的索引len(s) - k - 1在哪里。krange
UPD1:可以對utf-8 runes進行反向(從右到左)查找,因為我們可以rune通過每個位元組或位元組組的高位輕松識別s。從The Go Programming Language書中:
如您所見,我們可以從最后一個位元組開始,我們最多需要向左掃描 4 個位元組才能獲得.

rune
uj5u.com熱心網友回復:
最簡單的解決方案是將 to 轉換string為[]rune,因此您可以對其進行迭代,但索引“向后”(或使用向下回圈):
rs := []rune(s)
max := len(rs) - 1
for i := range rs {
r := rs[max-i]
fmt.Printf("%c ", r)
}
這將輸出(在Go Playground上嘗試):
r e v e t a h w ? g n i r t s e m o s
如果你想避免[]rune轉換,你可以這樣使用utf8.DecodeLastRuneInString():
for {
r, size := utf8.DecodeLastRuneInString(s)
if r == utf8.RuneError {
break
}
fmt.Printf("%c ", r)
s = s[:len(s)-size]
}
這輸出相同,在Go Playground上試試這個。
uj5u.com熱心網友回復:
你可以做:
runes:=[]rune(str)
for x:=len(runes)-1; x>=0; x-- {
// work with runes[x]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367093.html
上一篇:滑動擴展影片旁邊的專案
