首页  >  文章  >  后端开发  >  Go 中如何检查三个值是否相等?

Go 中如何检查三个值是否相等?

Linda Hamilton
Linda Hamilton原创
2024-11-04 03:57:01452浏览

How Can I Check if Three Values are Equal in Go?

优雅地检查三个值是否相等

虽然 if a == b == c 的传统方法会导致语法错误,但是确定三个值是否相等的替代方法。

使用清晰简洁的方法

最简单的解决方案仍然是:

<code class="go">if a == b && a == c {
    fmt.Println("All 3 are equal")
}</code>

这个解决方案简单高效,可以逐对进行比较。

探索创意解决方案

将地图用作集合:

len() 函数返回映射中唯一键的数量。通过使用带有 interface{} 键的映射,我们可以通过将映射长度与 1 进行比较来检查所有值是否相等:

<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 {
    fmt.Println("All 3 are equal")
}</code>

使用数组:

数组是可比较的,允许我们一次比较多个元素:

<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} {
    fmt.Println("All 3 are equal")
}</code>

使用一个棘手的映射:

我们可以使用一个键来索引一个映射,结果是比较值:

<code class="go">if map[interface{}]bool{a: b == c}[b] {
    fmt.Println("All 3 are equal")
}</code>

使用匿名结构:

结构也是可比较的,因此我们可以使用值创建一个匿名结构并比较它们:

<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} {
    fmt.Println("All 3 are equal")
}</code>

使用切片:

要比较切片,我们使用 Reflect.DeepEqual() 函数:

<code class="go">if reflect.DeepEqual([]interface{}{a, b}, []interface{}{b, c}) {
    fmt.Println("All 3 are equal")
}</code>

使用辅助函数:

我们可以定义一个辅助函数来处理任意数量的值:

<code class="go">func AllEquals(v ...interface{}) bool {
    if len(v) > 1 {
        a := v[0]
        for _, s := range v {
            if a != s {
                return false
            }
        }
    }
    return true
}</code>

以上是Go 中如何检查三个值是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn