arrays - 将空间分隔的整数存储到数组中的更整洁的方法?

标签 arrays go

我才刚刚开始使用 go,如果我的任何问题很明显,请提前致歉,但我花了很长时间在网上寻找答案,但找不到我要找的东西。

我想读取一行空格分隔的 int 值并将它们存储到一个数组中。在输入值之前会知道值的数量,但我相当确定必须有比这更简单或更简洁的编写方式:

package main

import "fmt"

func main()  {
    var array[5] int
    fmt.Scanf("%d %d %d %d %d", &array[0], &array[1], &array[2], &array[3], &array[4])
    fmt.Printf("%v", array)

}

我还需要这样做,以便可以更改值的数量(最多 50 个)并且它们仍应存储在数组中。我写了一个简单的函数来使 scanf 函数读取正确数量的数字,但没有将每个数组元素一直写到 &array[49] 我找不到解决方法。 有没有更简单的方法来存储所有值而无需很长的数组位置列表?

package main

import "fmt"

func main()  {
    var length int
    fmt.Scanf("%d", &length)
    var array[50] int
    fmt.Scanf(scanFormat(length), &array[0], &array[1], &array[2]) //etc.
    fmt.Printf("%v", array)

}
func scanFormat (N int) string{
    if N==0 {
        return ""
    }
    return "%d "+scanFormat(N-1)
}

最佳答案

你可以去 bufio.NewScanner 扫描整行。默认的分割函数是 ScanLines。

NewScanner returns a new Scanner to read from r. The split function defaults to ScanLines.

func (s *Scanner) Text() string

Text returns the most recent token generated by a call to Scan as a newly allocated string holding its bytes

逐一解析字符串值,将字符串转换为整数值,将数据追加到整数 slice 中。现在以您想要的方式处理数据。

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {

    data := make([]int, 0)
    scanner := bufio.NewScanner(os.Stdin)
    counter := 0
    for scanner.Scan() {
        output := strings.Split(scanner.Text(), " ")
        for _, value := range output {
            i, err := strconv.Atoi(value)
            if err != nil {
                fmt.Println(err)
            }
            data = append(data, i)
        }
        counter++
    }

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stdout, "reading standard input:", err)
    }

    fmt.Println("the data from terminal: ", data)
}

关于arrays - 将空间分隔的整数存储到数组中的更整洁的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52804595/

相关文章:

javascript - JsPdf autotable 中单元格内的粗体和普通文本样式(如何使用 jsautotable jspdf 使用粗体和普通文本)

ruby-on-rails - 检查数组中的元素是否在最后 5 秒内被创建

printing - 如何打印到实际打印机?

arrays - Goroutines 共享 slice : : trying to understand a data race

python - 如何在 numpy 中将二维数组中的行切片归零?

c# - 收集在设计中创建的文本框

c - 数组未在 if 语句 C 内更新

Golang : fmt, 可变参数和 %!(EXTRA type=value) 错误

amazon-web-services - 模拟AWS Go SSM GetParameter调用

go - 如何向 goroutine 发出停止运行的信号?