ホームページ >バックエンド開発 >Golang >標準入力から Go スライスに複数の数値を効率的に読み取るにはどうすればよいですか?

標準入力から Go スライスに複数の数値を効率的に読み取るにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 05:29:10193ブラウズ

How to Efficiently Read Multiple Numbers into a Go Slice from Standard Input?

標準入力から Go スライスに複数の数値を読み取る

Go では、fmt.Fscan 関数を使用して複数の数値を配列またはスライスに読み取ることができます。ただし、スライスに直接スキャンしようとすると、エラーが発生する場合があります。これは、 fmt.Fscan 関数が本質的にスライスのスキャンをサポートしていないためです。

この問題を解決するには、すべてのスライス要素のアドレスを配列にパックするユーティリティ関数を作成できます。その方法は次のとおりです:

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}

ユーティリティ関数を取得したら、それを使用してスライス全体をスキャンして配列に入れることができます:

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)

テスト目的で、 fmt.Sscan を使用して文字列をスライスにスキャンできます:

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)

出力 (外出先で試してみてください)遊び場):

[1 3 5 7 9] 5 <nil>

以上が標準入力から Go スライスに複数の数値を効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。