ホームページ > バックエンド開発 > Golang > fmt.Fscan を使用して複数の数値を Go スライスに効率的に読み取るにはどうすればよいですか?

fmt.Fscan を使用して複数の数値を Go スライスに効率的に読み取るにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-16 21:53:15
オリジナル
611 人が閲覧しました

How Can I Efficiently Read Multiple Numbers into a Go Slice Using fmt.Fscan?

fmt.Fscan を使用して数値をスライスに読み取る

fmt.Fscan を使用して Go で複数の数値を配列またはスライスに読み取るには、次のようにします。個々の変数を宣言し、そのアドレスを次のように指定するのが一般的です。 argument:

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
ログイン後にコピー

ただし、スライス自体をパラメーターとして fmt.Fscan に直接渡すことはできません。このプロセスを簡素化するために、スライス要素のアドレスをパックするユーティリティ関数を作成できます:

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}
ログイン後にコピー

この関数を使用すると、fmt.Fscan でスライス全体をスキャンできるようになります:

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...) // ... unpacks the slice addresses
fmt.Println(numbers, n, err)
ログイン後にコピー

たとえば、次のテスト入力を考えてみましょう:

1 3 5 7 9
ログイン後にコピー

使用テスト目的の fmt.Sscan:

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err) // Output: [1 3 5 7 9] 5 <nil>
ログイン後にコピー

これは、fmt.Fscan を使用して複数の数値を効率的にスライスに読み取る方法を示します。

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

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