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

huangapple go评论76阅读模式
英文:

Check if all items in a slice are equal

问题

我需要创建一个函数,它能够:

  • 如果切片中的所有元素都相等(它们将是相同的类型),则返回true。
  • 如果切片中的任何元素不同,则返回false。

我能想到的唯一方法是反转切片,然后比较切片和反转后的切片。

有没有更好的方法来实现这个功能,既具有良好的语法又更高效?

英文:

I need to create a function that:

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

The only way I can think of doing it is to reverse the slice, and compare the slice and the reversed slice.

Is there a better way to do this thats good syntax and more efficient?

答案1

得分: 17

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

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

I am not sure what your though process was for reversing the slice was, but that would be unnecessary. The simplest algorithm would be to check to see if all elements after the the first are equal to the first:

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

答案2

得分: 1

虽然有一个被接受的答案,但我只是用range关键字发布它。

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

Although there is an accepted answer, I'm just posting it with range keyword.

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

huangapple
  • 本文由 发表于 2016年3月28日 06:35:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/36253509.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定