gpt4 book ai didi

arrays - 在go中查找二维 slice 的长度

转载 作者:IT王子 更新时间:2023-10-29 01:55:12 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

这是一个函数:

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 .

关于arrays - 在go中查找二维 slice 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com