gpt4 book ai didi

for-loop - 如何处理迭代器的类型?

转载 作者:IT王子 更新时间:2023-10-29 02:35:38 27 4
gpt4 key购买 nike

我有以下代码:

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 声明为 uint8:

var i uint8
for i = 0; i < 64; i++ {

因为我相信在循环中初始化迭代器的底层是非常优化的,之前声明一个迭代器也不是最好的解决方案。
最好的实现方式是什么?

最佳答案

您可以声明 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
}

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

关于for-loop - 如何处理迭代器的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54852331/

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