go - 如何制作可变类型切片
问题描述
我通过做一些我已经用其他语言完成的问题来学习围棋。
所以问题之一是: -
- 求 Array Arr = [1,2,[7,8,3],1,[3,[2,[4,5]],6]] 中元素的总和
我试过制作一个接口类型数组,但这也没有用
func ProdSum(prods interface{},sum int ,depth int){
for id,val:=range prods{
if isArray(val){
ProdSum(val,sum,depth)
}
}
}
type arr []interface{}
func main(){
arra:=arr{5,2,arr{7,-1},3,arr{6,arr{-13,8},4}}
ProdSum(arra,0,1)
}
Error :
./prodsum.go:16:14: cannot range over prods (type interface {})
解决方案
使用类型断言或类型开关来确定一个值是切片还是整数。以下是使用类型开关的方法:
func sum(value interface{}) int {
switch value := value.(type) {
case arr:
var result int
for _, v := range value {
result += sum(v)
}
return result
case int:
return value
default:
panic("type not handled")
}
}
像这样称呼它:
a := arr{5, 2, arr{7, -1}, 3, arr{6, arr{-13, 8}, 4}}
n := sum(a)
推荐阅读
- python - C++ OpenCV 中的快速索引
- redux - 如何在操作文件中订阅 redux 存储中的更改
- sql - 数百万行的 Enterprise Postgresql 查询性能
- amazon-product-api - Amazon API——如何获取特定用户的所有评论
- swift - 自定义 UIView 类中的 Swift 设置变量
- android - 我如何禁用特定日期
- xml - SSRS 动态 XML 数据源连接字符串可能吗?
- c# - 如何在 ASP.Net 核心 2.1 Web API 中将控制器视图作为默认页面?
- amazon-cloudformation - CloudFormation - SAM 模板的结构无效。“资源”部分是必需的
- excel - 如何根据上一年的值在 Excel 中使用 MDX 使用加权分配?(在 SSAS 中写回)