ホームページ  >  記事  >  バックエンド開発  >  For ループを使用せずに Golang の標準入力から複数の整数を読み取る方法は?

For ループを使用せずに Golang の標準入力から複数の整数を読み取る方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-29 01:10:30470ブラウズ

How to Read Multiple Integers from Standard Input in Golang Without a For Loop?

Golang でスペースで区切られた整数を読み取る

質問:

複数の整数を効率的に読み取る方法標準入力 (stdin) から整数を取得し、Golang の for ループを使用せずに整数スライスに格納しますか?たとえば、次の入力があるとします:

Enter the number of integers
3
Enter the integers
23 45 66

これらの値を整数スライスに変換するには?

答え:

ループですがが本質的に存在するため、明示的な for または goto ループを使用せずにこれを実現できます。方法は次のとおりです:

<code class="go">package main

import "fmt"

func main() {
    fmt.Println(`Enter the number of integers`)
    var n int
    if m, err := Scan(&amp;n); m != 1 {
        panic(err)
    }
    fmt.Println(`Enter the integers`)
    all := make([]int, n)
    ReadN(all, 0, n)
    fmt.Println(all)
}

func ReadN(all []int, i, n int) {
    if n == 0 {
        return
    }
    if m, err := Scan(&amp;all[i]); m != 1 {
        panic(err)
    }
    ReadN(all, i+1, n-1)
}

func Scan(a *int) (int, error) {
    return fmt.Scan(a)
}</code>

入力/出力の例:

Enter the number of integers
3
Enter the integers
10 20 30
[10 20 30]

より高速な入力スキャンのための最適化:

入力スキャン速度を向上させるには、Scan 関数を次の最適化されたバージョンに置き換えます:

<code class="go">func Scan(a *int) (int, error) {
    var buf [10]byte
    var ret int
    for scanned, err := fmt.Scanf("%d%s", &ret, &buf); err == nil && scanned != 2; {
        fmt.Scanf("%s", &buf)
    }
    *a = ret
    return 1, err
}</code>

以上がFor ループを使用せずに Golang の標準入力から複数の整数を読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。