ホームページ >バックエンド開発 >Golang >初期値と容量の両方でスライスを初期化するにはどうすればよいですか?

初期値と容量の両方でスライスを初期化するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-08 22:18:301052ブラウズ

初期値と容量の両方でスライスを初期化するにはどうすればよいですか?

php エディタ Baicao では、スライスの初期化中に初期値と容量の両方を使用してコードの効率を向上させる方法を紹介します。 PHP では、スライスは必要に応じて動的に拡大または縮小できる動的配列です。通常、スライスを初期化する場合、初期値を指定できますが、容量を直接指定することはできません。ただし、初期値と容量の両方を使用してスライスを初期化する裏技がありますので、見てみましょう。

質問内容

コードの一部は次のとおりです:

リーリー

SlicefibboC には、拡張時に問題を軽減するためにスライスの estimatedsize を予約する vector のような reserved 関数はありません。容量 コピー時間。したがって、初期化時に推定サイズを容量に割り当てることしかできません。しかし、以下のいずれも合法ではありません。

リーリー

この問題に対する解決策はありますか?それとも、コードが不器用で、次の方法しか方法がないのでしょうか。

const estimatedsize = 10000
var init_arr = [...]int{1,1,2,3,5,8,13}
var fibbo []int = make([]int, len(init_arr), estimatedsize)    
}

解決策

いいえ、これは不可能です。これは、この設計上の決定を導く Go 設計哲学の一部です。「複雑さを隠さない」

あなたの「ぎこちない」コードは、実際には Go でこれを行うための好まれる慣用的な方法ですが、1 つの小さな変更があります:

リーリー

私が (形式以外に) 行った唯一の変更は、完全に冗長だったので、var 宣言から型を削除することでした。言い換えると:### リーリー

コメントで指摘されているように、入力に他に変更を加えない場合は、組み込みの

copy を使用して for ループを削除することもできます。 リーリー

以上が初期値と容量の両方でスライスを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。