Golang 中从空格分隔的输入中读取整数:一种有效的方法
在编程中,从标准输入并将它们有效地存储在数组中是一项常见任务。实现此目的的一种方法是使用简单的 for 循环。然而,有一种技术可以利用递归来最小化代码,同时保持最佳性能。
在没有显式循环的情况下使用递归
以下 Go 代码片段演示了如何阅读不使用 for 或 goto 循环从标准输入获取整数:
<code class="go">package main import "fmt" func main() { var n int fmt.Println(`Enter the number of integers`) if _, err := fmt.Scan(&n); err != nil { panic(err) } fmt.Println(`Enter the integers`) all := make([]int, n) ReadN(all, 0, n) fmt.Println(all) } // Recursively reads n integers into all starting from position i. func ReadN(all []int, i, n int) { if n == 0 { return } if _, err := fmt.Scan(&all[i]); err != nil { panic(err) } ReadN(all, i+1, n-1) }</code>
示例输出
假设标准输入包含整数:
Enter the number of integers 3 Enter the integers 23 45 66
运行程序将输出:
[23 45 66]
优化输入扫描
要进一步优化输入扫描,请考虑用自定义阅读器替换ReadN中的fmt.Scan函数可以实现更快的输入处理:
<code class="go">type reader struct { val int } func (r *reader) Read(b []byte) (int, error) { w, err := fmt.Scanf("%d", &r.val) if err != nil { return w, err } b[0] = byte(r.val) return 1, err }</code>
在此优化实现中,使用字段 val 创建自定义读取器来保存整数值。 Read 方法使用 fmt.Scanf 从标准输入读取整数并将其存储在 val 中。从自定义读取器读取时,仅处理一个字节,从而显着减少开销。
通过结合这些技术,您可以高效地从 Golang 中的标准输入读取整数集,从而最大限度地提高性能,同时最大限度地降低代码复杂性。
以上是如何在 Golang 中从空格分隔的输入中读取整数:递归方法?的详细内容。更多信息请关注PHP中文网其他相关文章!