2017-01-06 10 views
2

フィルター:Swift3でスウィフト3:このように範囲をフィルタリングすることが可能であったスウィフト2では範囲

let range: Range<Int> = 1..<100 
let mult4 = range 
    .filter{n in n % 4 == 0} 

範囲は、そのフィルタ方式を失っているようです。助言がありますか?

+1

あなたが ''範囲明示的な型注釈を追加していなかった場合は、あなたのコードはまだコンパイルします;) – Hamish

答えて

7

あなたは可算範囲使用する必要があります:(Closed)Rangeは "間隔" を説明し、列挙することはできません、Countable(Closed)Rangeに対し

let range: CountableRange<Int> = 1..<100 
// Or simply: let range = 1..<100 

let mult4 = range.filter { n in n % 4 == 0 } 

を連続する値の集合です。

2

あなたはstrideを使用することができます。

let mult4 = Array(stride(from: 0, to: 100, by: 4)) 
+2

これは、よりよい解決策です。もちろん、直接的な答えではありませんが、この特定の例では、より速く、より少ないRAMを使用します。 – Alexander

+0

@Alexander:確かに良い解決策ですが、メモリ消費の面で違いがあるのではないでしょうか。 –

+0

@MartinRうわー、私はOPのコードが 'Array(range).filter ...'だったと思った。 – Alexander

0
let range: Range<Int> = 1..<100 
let mult4 = [Int](range.lowerBound..<range.upperBound).filter{n in n % 4 == 0} 
関連する問題