为了账号安全,请及时绑定邮箱和手机立即绑定

在 go 中查找 2D 切片的长度

在 go 中查找 2D 切片的长度

Go
白衣染霜花 2021-11-22 18:34:03
我想检查矩阵的大小是否相同:两个矩阵是否具有相同的行数和相同的列数。matrix1 := [][]int{{1,2,3} ,{4,5,6}} matrix2 := [][]int{{7,8,9}, {10,11,12}}我明白了len(matrix1) == len(matrix2) == 2。这是正确的行数。如果我声明矩阵如上所示,如何检查每行的长度(即列数,应为 3)?
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

请注意,由于 2D 切片中的每个“行”可能具有任意长度,因此您应该检查每个对应行(具有相同索引)的长度是否相等。


这是一个执行此操作的函数:


func match(m1, m2 [][]int) bool {

    if len(m1) != len(m2) {

        return false

    }


    for i, row1 := range m1 {

        row2 := m2[i]

        if len(row1) != len(row2) {

            return false

        }

    }


    return true

}

查看使用示例:


m1 := [][]int{{1, 2, 3}, {4, 5, 6}}

m2 := [][]int{{7, 8, 9}, {10, 11, 12}}

fmt.Println(match(m1, m2))


m1 = [][]int{{1, 2, 3}, {4, 5, 6, 7, 8}}

m2 = [][]int{{7, 8, 9}, {10, 11, 12, 12, 13}}

fmt.Println(match(m1, m2))


m1 = [][]int{{1, 2, 3}, {4, 5, 6, 7, 8}}

m2 = [][]int{{7, 8, 9}, {10, 11, 12, 12}}

fmt.Println(match(m1, m2))


m1 = [][]int{{1, 2, 3}}

m2 = [][]int{{7, 8, 9}, {10, 11, 12, 12}}

fmt.Println(match(m1, m2))

输出(如预期):


true

true

false

false

特殊情况的简化:


如果您保证所有矩阵中的所有行都具有相同的长度,则可以进行一个很大的简化:在这种情况下,如果行数匹配,则实际上仅比较每个矩阵中行之一的长度就足够了第一行。


它可能是这样的:


func match2(m1, m2 [][]int) bool {

    if len(m1) != len(m2) {

        return false

    }

    return len(m1) == 0 || len(m1[0]) == len(m2[0])

}

测试它:


m1 = [][]int{{1, 2, 3}, {4, 5, 6}}

m2 = [][]int{{7, 8, 9}, {10, 11, 12}}

fmt.Println(match2(m1, m2))


m1 = [][]int{{1, 2, 3, 4}, {5, 6, 7, 8}}

m2 = [][]int{{7, 8, 9}, {10, 11, 12}}

fmt.Println(match2(m1, m2))

输出:


true

false


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信