2017-01-12 5 views
0

私はすでにSwift 3を学び始めました(私は既に他のプログラミング言語の経験があります)、for-eachのイテレータの中の値を変更できるかどうか質問しましたループ(for-inではない!)。次の例を見てみましょう:for-eachループのイテレータの値を変更します

var numbers = [45000.0, 50000.0, 60000.0] 

for i in 0..<numbers.count { 
    numbers[i] = numbers[i] + (numbers[i] * 0.1) 
} 

この例では、配列内の値を変更できます。しかし、私がfor-eachループを使用したい場合:

for number in numbers { 
    number = number + (number * 0.1) 
} 

コンパイルされません。他の方法でもnumberの値を変更することは可能ですか(これはC++のイテレータのようです)。

ありがとうございました!

答えて

3

Array<Double>は値型で、インデックス変数numberは定数なので、使用することはできません。 numberを変更可能にするには、それをコピーして元のアイテムをそのままアレイに残す必要があります。

妥協は、enumerated()の機能です。

var numbers = [45000.0, 50000.0, 60000.0] 

for (i, number) in numbers.enumerated() { 
    numbers[i] = number + (number * 0.1) 
} 

しかし、Sulthanが提案する解決法が好ましい。

+0

ここで 'map'を使う方がはるかに良いでしょう。 Forループは "古い学校"ですhaha – Fogmeister

+0

私は知っていますが、私は文字通り質問に答えたいと思っていました。 – vadian

+0

OK、十分に:) – Fogmeister

4

あなたはまだ古いプログラミング言語を考えています。現代的なアプローチは、手動の反復を使用せず、ヘルパー関数を使用して1つのステップですべてを行うことです。私たちが代わりに既存のものを変更する新しい配列を生成した

let numbers = [45000.0, 50000.0, 60000.0] 
let newNumbers = numbers.map { $0 + $0 * 0.1 } 

注意。定数(immutables)の使用は、多くの一般的なプログラミングミスを避けるのに役立ちます。

関連する問題