Arrays 如何比较golang中的两个[][]字符串数组 func assertEq(测试[][]字符串,ans[][]字符串){ 对于i:=0;i

Arrays 如何比较golang中的两个[][]字符串数组 func assertEq(测试[][]字符串,ans[][]字符串){ 对于i:=0;i,arrays,string,go,Arrays,String,Go,在我的代码中,它不是检查。我使用了两个不同的字符串数组来比较每个字符。I和j是test和ans的长度。因此,它们不是test[i][j]或ans[i][j]的有效索引 你可以简单地使用 可以扩展多个维度切片 一个简单的例子: func assertEq(test [][]string, ans [][]string) { for i := 0; i < len(test); i++ { for j := 0; j < len(ans); j++ {

在我的代码中,它不是检查。我使用了两个不同的字符串数组来比较每个字符。

I
j
test
ans
的长度。因此,它们不是
test[i][j]
ans[i][j]
的有效索引

你可以简单地使用

可以扩展多个维度切片

一个简单的例子:

func assertEq(test [][]string, ans [][]string) {
    for i := 0; i < len(test); i++ {
        for j := 0; j < len(ans); j++ {
            if test[i][j] != ans[i][j] {
                fmt.Print(test)
                fmt.Print(" ! ")
                fmt.Print(ans)
            }
        }
    }
    fmt.Println()
}

包cmp确定值的相等性

该软件包旨在成为更强大、更安全的替代方案 用于比较两个值在语义上是否相等 平等



使用package
cmp

您是否尝试了
reflect.DeepEqual
?请注意
[]字符串
不是数组。这是一个切片。您已经编写了比较切片的代码。到底是什么问题(除了缺少边界检查)。为了获得更好的性能,请在检查所有元素是否相等之前检查切片长度是否相等。如果性能不是一个问题,您可以按照@alexefimove的建议使用DeepEqual
package main

import (
    "fmt"
    "reflect"
)

func assertEq(test [][]string, ans [][]string) bool {
    return reflect.DeepEqual(test, ans)
}

func main() {
    str1 := [][]string{{"1", "2", "3"}, {"1", "2", "3"}, {"1", "2", "3"}}
    str2 := [][]string{{"1", "2", "3"}, {"1", "2", "3"}, {"1", "2", "3"}}
    str3 := [][]string{{"1", "2", "3"}, {"1", "2", "3"}, {"1", "2"}}

    fmt.Println(assertEq(str1, str2)) // answer is true
    fmt.Println(assertEq(str1, str3)) // answer is false
}
import "github.com/google/go-cmp/cmp"