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