2016-05-27 6 views
1

Doubleの値はfloor()で0から1に丸め、他のdouble値はIntegerに変換しています。次に、を使用して値が存在するかどうかを確認し、値が存在しない場合は配列に追加します。配列 'contains()'チェックで丸め値が検出されない

let radius = center.distanceFromLocation(location)/1000 
let section = floor(radius) == 0 ? 1 : Int(radius) 

if !self.myArray.contains(Int(radius)) { 
    self.myArray.append(section) 
} 

問題があり、それは「1」と「0から丸め1」のmyArrayに異なる値を追加します:ここでは、スニペットです。ここ

は、いくつかのデバッグである:

(lldb) po myArray 
▿ 3 elements 
    - [0] : 1 
    - [1] : 1 { ... } 
    - [2] : 11  // it's working fine for other numbers 

(lldb) po myArray[0] 
1 

(lldb) po myArray[1] 
1 

(lldb) po myArray[2] 
11 


(lldb) p myArray[0] 
(Int) $R11 = 1 

(lldb) p myArray[1] 
(Int) $R10 = 1 
+0

テスト用の実際の値を入力してください。 – matt

+0

それは '0、1、11'のようになります。 11はうまくいきます。しかし、 "1"と "0から丸められた1"は、両方とも1であるにもかかわらず、2つの異なる値のように振る舞います。 – senty

答えて

1

!self.myArray.contains(Int(radius))があなたのケースで間違っているかチェックしています。

配列にはすでに1が含まれていて、0.3を挿入するのが不思議です。 section1になりますが、既に含まれていないか確認してください。Int(radius) = 0は含まれていません。次に、section1)をもう一度追加します。

あなたのコードは、ほとんど一度に含まれるすべての値を保証Setを使用する代わりに

if !self.myArray.contains(section) { 
    self.myArray.append(section) 
} 

であるか、または必要があります。

+0

巨大な感謝...魅力的な作品! – senty

0

はい、例えばINT(1)及びINT(0.45)で異なるINT(半径)を取るため。 発生している間違った動作が発生する可能性があるため、myArrayにInt(radius)ではなくsectionが含まれているかどうかを確認してください。

関連する問題