我正在尝试将一个整数列表从一个字符串扫描到一个数组(或者一个 slice )中
package main
import "fmt"
func main() {
var nums [5]int
n, _ := fmt.Sscan("1 2 3 4 5", &nums) // doesn't work
fmt.Println(nums)
}
为了让它工作,我需要将什么作为第二个参数传递给 Sscan
?
我知道我可以传递 nums[0]、nums[1] ...
等,但我更喜欢单个参数。
最佳答案
我不认为这是一种方便的单线方式。由于 Sscan
采用 ...interface{}
,您还需要传递接口(interface) slice ,因此首先转换您的数组:
func main() {
var nums [5]int
// Convert to interfaces
xnums := make([]interface{}, len(nums))
for n := range nums {
xnums[n] = &nums[n]
}
n, err := fmt.Sscan("1 2 3 4 5", xnums...)
if err != nil {
fmt.Printf("field %d: %s\n", n+1, err)
}
fmt.Println(nums)
}
http://play.golang.org/p/1X28J7JJwl
显然,您可以在接口(interface)数组中混合使用不同的类型,这样可以更轻松地扫描更复杂的字符串。对于空间有限的整数,您最好使用 strings.Split
或 bufio.Scanner
以及 strconv.Atoi
。
关于go - 如何使用 fmt.Sscan 将整数解析为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28604563/