Golang でスペース区切りの入力から整数を読み取る方法: 再帰的アプローチ?

DDD
リリース: 2024-10-30 21:01:30
オリジナル
126 人が閲覧しました

How to Read Integers from Space-Separated Input in Golang: A Recursive Approach?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!