登录
首页 >  Golang >  Go问答

用Go语言在数组中比较任意订单值是否相同的方法

来源:stackoverflow

时间:2024-02-09 11:18:22 137浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《用Go语言在数组中比较任意订单值是否相同的方法》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我还是 golang 新手。我想知道如果两个数组以任何顺序包含相同的值,我如何检查两个数组是否被视为相等。我已经阅读了comparing arrays in go language中的答案,并且我知道如果我使用==,如果这些数组包含相同顺序的相同值,则数组被认为是相等的。

例如,我希望这些数组被视为相等。

a := [3]int{1,2,3}
b := [3]int{3,2,1}

正确答案


在 go 1.18 或更高版本中,您可以在比较之前使用 sort.ints 对数组进行排序,然后使用 slices.equal 来比较排序后的切片。像这样的东西:

func equalignoringorder(a, b []int) bool {
    if len(a) != len(b) {
        return false
    }

    sort.ints(a)
    sort.ints(b)

    return slices.equal(a, b)
}

你可以像这样使用它:

package main

import (
    "fmt"
    "sort"

    "golang.org/x/exp/slices"
)

func EqualIgnoringOrder(a, b []int) bool {
    if len(a) != len(b) {
        return false
    }

    sort.Ints(a)
    sort.Ints(b)

    return slices.Equal(a, b)
}

func main() {
    a := []int{1, 2, 3}
    b := []int{3, 2, 1}

    if EqualIgnoringOrder(a, b) {
        fmt.Println("arrays are equal")
    } else {
        fmt.Println("arrays are not equal")
    }
}

请注意,这里我使用的是切片而不是数组;引用 https://go.dev/blog/slices 的话,“数组在 go 程序中并不常见,因为数组的大小是其类型的一部分,这限制了它的表达能力。”

我们不能使用 == 来比较切片,这就是为什么我们使用 slices.equal (仅适用于 go 1.18 或更高版本)。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>