【问题标题】:how to compare two [][]string arrays in golang如何在golang中比较两个[][]字符串数组
【发布时间】:2018-09-26 02:21:38
【问题描述】:
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()
}

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

【问题讨论】:

  • 你试过reflect.DeepEqualgolang.org/pkg/reflect/#DeepEqual吗?
  • 请注意[][]string 不是一个数组。这是一片片。
  • 您已经编写了比较切片的代码。到底是什么问题(除了缺少边界检查)。
  • 为了获得更好的性能,请先检查切片长度是否相等,然后再检查所有元素是否相等。如果性能不是问题,您可以按照@AlexEfimov 的建议使用 DeepEqual

标签: arrays string go


【解决方案1】:

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
}

【讨论】:

    【解决方案2】:

    package cmp

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

    包 cmp 确定值的相等性。

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


    使用包cmp

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 2016-03-26
      • 2023-02-09
      • 2022-06-29
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      相关资源
      最近更新 更多