【问题标题】:Finding the length of 2D slices in go在 go 中查找 2D 切片的长度
【发布时间】:2016-02-24 05:22:50
【问题描述】:

我想检查矩阵的大小是否相同:两个矩阵是否具有相同的行数和相同的列数。

matrix1 := [][]int{{1,2,3} ,{4,5,6}}
matrix2 := [][]int{{7,8,9}, {10,11,12}}

我收到len(matrix1) == len(matrix2) == 2。这是正确的行数。

如果我如上所示声明矩阵,如何检查每行的长度(即列数,应为 3)?

【问题讨论】:

    标签: arrays matrix multidimensional-array go slice


    【解决方案1】:

    请注意,由于 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
    

    Go Playground 上试试这些。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2017-11-27
      相关资源
      最近更新 更多