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

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

Linda Hamilton
リリース: 2024-11-29 05:29:10
オリジナル
104 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート