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
- 1 回答
- 0 关注
- 139 浏览
添加回答
举报