30秒学会 Golang 片段 · 2018年11月15日

30秒学会 Golang 片段 – AllSame

Returns true if all elements in the collection have the same value, false otherwise.

Use reflect.ValueOf() to get the array or slice, Value.Index() and Value.Interface() to get the first value.
Use a for loop with Value.Len() and Value.Index() to iterate over each element and compare it to the search value.
Return false if a non-matching value is found, true otherwise.

代码实现

import "reflect"

func AllSame(params ...interface{}) bool {
    arr := reflect.ValueOf(params[0])
    v := arr.Index(0).Interface()

    for i := 0; i < arr.Len(); i++ {
        if arr.Index(i).Interface() != v {
            return false
        }
    }
    return true
}

使用样例

AllSame([]int{1, 2, 3, 4, 5, 6}) // false
AllSame([]int{1, 1, 1, 1}) // true