我正在创建一个用于存储单个unicode字符的数据结构,然后我可以进行比较。
两个问题:
我使用哪种数据类型?
type ds struct {
char Char // What should Char be so that I can safely compare two ds?
}
我需要一种比较任意两个unicode字符串的第一个字符的方法。有一个简单的方法吗?基本上,我如何检索字符串的第一个unicode字符?
答案 0 :(得分:2)
像这样:def parent(child):
.. | objects | select( .Origins.Items[]? | .Id == child) | .Id ;
。
注意"比较",这对Unicode来说是一件复杂的事情。虽然代码点(type Char rune
s)很容易在数字上进行比较(U + 0020 == U + 0020; U + 1234< U + 2345),但这可能是也可能不是您想要的情况,组合字符和Unicode提供的其他内容。
答案 1 :(得分:1)
要比较utf8字符串,您需要检查其符文值。 Runevalue是utf8字符的int32值。使用标准包“unicode / utf8”。传递“string [0:]”以获取第一个字符
test := "春节"
runeValue, width := utf8.DecodeRuneInString(test[0:])
fmt.Println(runeValue,width)
fmt.Printf("%#U %d", runeValue, runeValue)
现在您可以使用==运算符
比较两个字符串的第一个字符的runeValue如果要存储整个字符,还需要将字符串存储在字符串中。
type ds struct {
char string // What should Char be so that I can safely compare two ds?
}
完整的代码证明了这一点:
package main
import (
"fmt"
"unicode/utf8"
)
type ds struct {
char string // What should Char be so that I can safely compare two ds?
}
func main() {
fmt.Println("Hello, playground")
ds1 := ds{"春节"}
ds2 := ds{"春节"}
runeValue1, _ := utf8.DecodeRuneInString(ds1.char[0:])
runeValue2, _ := utf8.DecodeRuneInString(ds2.char[0:])
fmt.Printf("%#U %#U", runeValue1, runeValue2)
if runeValue1 == runeValue2 {
fmt.Println("\nFirst Char Same")
} else {
fmt.Println("\nDifferent")
}
}
答案 2 :(得分:0)
从沃尔克斯回答,我们可以用符文来比较。
type Char rune
[]rune(str)[0]