配列のすべてのメンバーをSwiftで同じ値に初期化するにはどうすればよいですか?


87

私はSwiftに大きな配列を持っています。すべてのメンバーを同じ値に初期化したい(つまり、ゼロまたは他の値にすることができます)。最善のアプローチは何でしょうか?


2
他のプログラミング言語の場合と同じように、配列を作成し、すべての要素をループして、それぞれを設定します。
ロバートハーベイ

19
var a = Array(count:100, repeatedValue:0)まさにこの有効な質問に対する答えです。
ロッド2014年

@ロッド、やってみます。質問が再開された場合は、回答として投稿できます。
m_power 2014年

2
ループは、ベクトル演算を使用するよりも少なくとも1桁遅くなります。
μολὼν.λαβέ

回答:


174

実際、Swiftを使えば非常に簡単です。Appleのドキュメントに記載されているように、次のように同じ繰り返し値で配列を初期化できます。

古いスウィフトのバージョン

var threeDoubles = [Double](count: 3, repeatedValue: 0.0)

以来スウィフト3.0

var threeDoubles = [Double](repeating: 0.0, count: 3)

それは与えるでしょう:

[0.0, 0.0, 0.0]

16
Swift3では次のように変更されたようですvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr 2016年

私はこれが本当に遅いことを発見しました、16MBのアレイはこの方法をクリアするのに数秒かかります。Cでは、memset(p, 0, 16*1024*1024)実質的に瞬時です。
wcochran 2017年

@wcochranこれを行うためのより良い方法を発見しましたか?
javadba

@javadbaいいえ。ハードウェアがこれを高速に実行できる場合、Swiftでこれを実行する効率的なメカニズムがないことにさらに驚いています。たぶん、ソースを調査する価値があります。
wcochran

36

これはSwift3の答えになります。

var threeDoubles = [Double]( repeating: 0.0, count: 3 )

1
自動提案の状態[Double](repeatElement(3.22、count:5))、まだ明示的に入力(繰り返し、カウント)は有効なようです
Ashwin G
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.