怎么用切片或map存储一个乘法表
时间: 2024-09-17 09:05:03 浏览: 30
在Go语言中,切片和map都可以用来存储乘法表,不过它们适合的情况和效率略有不同。
**使用切片:**
切片适合于存储固定大小的二维数据,如九九乘法表。我们可以通过嵌套循环生成一个二维整型切片来表示每个位置的乘积。例如:
```go
type MultiplicationTable [][][]int // 定义一个多维切片类型
func initMultiplicationTable() MultiplicationTable {
table := make(MultiplicationTable, 10)
for i := 0; i < len(table); i++ {
table[i] = make([][]int, i+1)
for j := 0; j < i+1; j++ {
table[i][j] = i * j
}
}
return table
}
```
在这个例子中,外层的切片长度对应行数,中间的切片长度对应列数,内层的切片存储具体的乘积值。
**使用Map:**
Map更适合存储动态键值对,比如存储特定范围内任意两个数字之间的乘积。如果需要支持查特定数字的乘积,或者按数字索引而非乘法关系存储,那么可以考虑用map:
```go
type MultiplicationTable map[int]map[int]int
func initMultiplicationTableMap() MultiplicationTable {
table := make(MultiplicationTable)
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
table[i][j] = i * j
}
}
return table
}
func getMultiplicationFromTable(m Table, n int) (int, int, bool) {
_, exists := m[n]
return m[n][n], m[n][n+1], exists
}
```
在这里,`table` 中的键是第一个数字,value是另一个map,其中键是第二个数字,值是对应的乘积。`getMultiplicationFromTable` 函数可以查询是否存在某个乘法关系。
选择哪种方式取决于实际需求,切片适用于固定的、按顺序存储的数据,而map则提供更强的灵活性和查找能力。