Golang でスペースで区切られた入力から整数を読み取る: 効率的なアプローチ
プログラミングでは、スペースで区切られた一連の整数を、標準入力を使用して配列に効率的に格納することは、一般的なタスクです。これを実現する 1 つの方法は、単純な for ループを使用することです。ただし、再帰を利用して、最適なパフォーマンスを維持しながらコードを最小限に抑える手法が存在します。
明示的なループを使用しない再帰の使用
次の Go コード スニペットは、読み取り方法を示しています。 for または goto ループを使用せずに標準入力から整数を取得します:
<code class="go">package main import "fmt" func main() { var n int fmt.Println(`Enter the number of integers`) if _, err := fmt.Scan(&n); err != nil { panic(err) } fmt.Println(`Enter the integers`) all := make([]int, n) ReadN(all, 0, n) fmt.Println(all) } // Recursively reads n integers into all starting from position i. func ReadN(all []int, i, n int) { if n == 0 { return } if _, err := fmt.Scan(&all[i]); err != nil { panic(err) } ReadN(all, i+1, n-1) }</code>
出力例
標準入力に整数が含まれているとします:
Enter the number of integers 3 Enter the integers 23 45 66
プログラムを実行すると次のように出力されます:
[23 45 66]
入力スキャンの最適化
入力スキャンをさらに最適化するには、ReadN の fmt.Scan 関数をカスタム リーダーに置き換えることを検討してください。これにより、入力処理の高速化が可能になります。
<code class="go">type reader struct { val int } func (r *reader) Read(b []byte) (int, error) { w, err := fmt.Scanf("%d", &r.val) if err != nil { return w, err } b[0] = byte(r.val) return 1, err }</code>
この最適化された実装では、整数値を保持するフィールド val を使用してカスタム リーダーが作成されます。 Read メソッドは、fmt.Scanf を使用して標準入力から整数を読み取り、val に格納します。カスタム リーダーから読み取る場合、処理されるのは 1 バイトだけであり、オーバーヘッドが大幅に削減されます。
これらの手法を組み込むことで、Golang の標準入力から一連の整数を効率的に読み取ることができ、コードの複雑さを最小限に抑えながらパフォーマンスを最大化できます。
以上がGolang でスペース区切りの入力から整数を読み取る方法: 再帰的アプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。