在Go中读取一行空格分隔整数的简洁而强大的方法

fon*_*ons 5 arrays parsing go

我一直在尝试HackerRank,其中问题通常需要将整数行读入数组(切片).

对于许多问题,我的解析代码最终比解决方案的算法更大.例如,Sherlock和Array就是这种情况

关于如何简洁地将空格分隔的整数行解析成切片的任何想法?fmt.Scanf不支持切片,使用时bufio我得到很长的解决方案.

一些要求:

  • 您只能使用标准库.
  • 解决方案应该简洁,越短越好.
  • 不应跳过错误检查.我知道输入在HackerRank中有明确定义,你应该能够偷工减料,但请不要,这是不好的做法.
  • 它应该是合理有效的.

注意: 解析器应该只使用一行而不是完整输入.

vod*_*095 1

1)读取字符串

\n\n

2)前置[和附加]

\n\n

3)将json解析为[]int?

\n\n
var input = "1,2,3"\nvar answer []int\nj := []byte(fmt.Sprintf("[%s]",input))\nerr:= json.Unmarshal(j, &input)\nif err != nil {\n  panic(err)\n}\nfor k,v := range input {\n   fmt.Printf("Element \xe2\x84\x96%v is %v\\n", k,v)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

还使用分割字符串(https://godoc.org/strings#Split)\nhttps://godoc.org/strconv#ParseInt

\n\n
input:= "1,2,3"\ntemp := strings.Split(input, ",")\nvar answer []int\n\nfor _,v := range temp {\n  i,err := strconv.ParseInt(v)\n  if err != nill {\n     panic(err)\n  }\n  answer = append(answer, i)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

UPD:刚刚发现数字是空格分隔的。\n所以,这段代码必须执行以下操作:

\n\n
input:= "1 2 3"\ntemp := strings.Split(input, " ")\nvar answer []int\n\nfor _,v := range temp {\n  i,err := strconv.ParseInt(v)\n  if err != nill {\n     panic(err)\n  }\n  answer = append(answer, i)\n}\n
Run Code Online (Sandbox Code Playgroud)\n