一尘不染

更好地比较片或字节?

go

我只是想知道哪种方法更好(或者我是否缺少更好的方法)。我试图确定一个单词的第一个字母和最后一个字母是否相同,并且有两个明显的解决方案。

if word[:1] == word[len(word)-1:]

要么

if word[0] == word[len(word)-1]

据我了解,第一个只是提取字符串的片段并进行字符串比较,而第二个则是从任一端提取字符并将其作为字节进行比较。

我很好奇两者之间是否存在性能差异,并且是否有任何“可取的”方式来做到这一点?


阅读 242

收藏
2020-07-02

共1个答案

一尘不染

如果用字母表示您的符文,请使用:

func eqRune(s string) bool {
    if s == "" {
        return false // or true if that makes more sense for the app
    }
    f, _ := utf8.DecodeRuneInString(s)  // 2nd return value is rune size. ignore it.
    l, _ := utf8.DecodeLastRuneInString(s) // 2nd return value is rune size. ignore it.
    if f != l {
        return false
    }
    if f == unicode.ReplacementChar {
        // First and last are invalid UTF-8. Fallback to 
        // comparing bytes.
        return s[0] == s[len(s)-1]
    }
    return true
}

如果您的意思是字节,请使用:

func eqByte(s string) bool {
    if s == "" {
        return false // or true if that makes more sense for the app
    }
    return s[0] == s[len(s)-1]
}

比较单个字节的速度比比较基准测试中所示的字符串切片的速度要快。

游乐场的例子

2020-07-02