如何在golang中比较两个[] []字符串数组

时间:2018-04-16 11:02:14

标签: arrays string go

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()
}

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

2 个答案:

答案 0 :(得分:2)

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

您只需使用reflect.DeepEqual()

您可以为多维切片扩展this solution

一个简单的例子:

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
}

答案 1 :(得分:0)

  

package cmp

import "github.com/google/go-cmp/cmp"
     

包cmp确定值的相等性。

     

此软件包旨在成为更强大,更安全的替代方案   to reflect.DeepEqual用于比较两个值是否在语义上   相等。

使用包cmp