检查切片中的所有项是否相等

7
我需要创建一个函数,它需要实现以下功能:
returns true if all elements in a slice are equal (they will all be the same type)
returns false if any elements in a slice are different

我能想到的唯一方法是反转切片,然后比较切片和反转后的切片。
有没有更好的方法来做到这一点,既具有良好的语法又更有效率?

反转操作会给回文切片带来错误的结果。 - Rusty Rob
2个回答

17

我不确定你反转切片的想法是什么,但那是不必要的。最简单的算法是检查第一个元素之后的所有元素是否都等于第一个元素:

func allSameStrings(a []string) bool {
    for i := 1; i < len(a); i++ {
        if a[i] != a[0] {
            return false
        }
    }
    return true
}

1
这是我能想到的最简单的方法。我喜欢它也适用于空切片。我建议的一个改进是允许它适用于任何类型,而不仅仅是字符串。 - Rusty Rob

1

虽然已经有一个被接受的答案了,但我想用 range 关键字来发表一下我的看法。

func allSameStrings(a []string) bool {
    for i, v := range(a) {
        if v != a[0] {
            return false
        }
    }
    return true
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接