为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理迭代器的类型?

如何处理迭代器的类型?

Go
烙印99 2023-06-12 11:14:38
我有以下代码:func generateBoard() {    for i := 0; i < 64; i++ {    }}func getRank(i int) uint8 {    return i / 8}在循环中我想调用getRank(i). 我想要getRank返回,uint8因为它是最少的整数类型,我不需要更多。问题是我不能int除以uint8. 我不想强制转换i,uint8因为它可能很昂贵(甚至可能在那里发生分配)。我也不想像在循环之前i那样声明:uint8var i uint8for i = 0; i < 64; i++ {因为我相信在循环中初始化迭代器的底层是非常优化的,之前声明一个迭代器也不是最好的解决方案。最好的实现方式是什么?
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以声明getRank()采用类型的值uint8,也可以在声明循环变量时使用类型化常量,因此i类型为uint8:


func generateBoard() {

    for i := uint8(0); i < 64; i++ {

        fmt.Println(getRank(i)) // Valid

    }

}


func getRank(i uint8) uint8 {

    return i / 8

}

在Go Playground上尝试一下。


您还可以使用移位运算符而不是除以 8:


func getRank(i uint8) uint8 {

    return i >> 3

}

但这是一个微优化,很可能也被编译器识别和使用。因此,请使用在您的上下文中更具表现力的那个。


查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信