2016-11-21 13 views
1

私はフィルタリングし、(既存の配列を反復しながら)ように、配列を作成していない「に等しい」:私は私の新しい配列から除外したい迅速な3フィルタ、複数の条件スウィフト3では

self.uniqueAddresses = self.uniqueAddresses.filter { $0.lat != thisUniqueAddress.lat) && $0.lng != thisUniqueAddress.lng } 

のみ両方の条件に一致する既存のオブジェクト。つまり、オブジェクトのlatが私のようなもので、そのlngが私のようなものであるなら、私は新しい配列に入れたくないということです。しかし、それらのいずれかが一致しても問題はなく、それが含まれている可能性があります。私は& &演算子を使って両方の条件を一緒にしていますが、条件の1つだけが真であっても自分の条件と一致していて、新しい配列には含まれていません。私はそれらを括弧でグループ化しようとしましたが、私は同じ結果を得ています。

+0

実際、私は自分自身を正しく表現していませんでした。新しい配列にはmy latとmy lngの両方に一致するオブジェクトが含まれてはいけません。だからこそ私は "!= lat"と "!= ing"を書いているのです。なぜなら、もし私がすでに持っているものと同じなら、私はそれを望まないからです。今起こっていることは、たとえ同じものであっても、それが一致しているとみなすために含まれていないということです。 –

+0

私は少し質問を編集して、少し明確にしました。 –

+0

ありがとう。正しいロジックが@Robertによって返されました –

答えて

2

これは単なるブール論理の問題です。あなたは緯度のいずれかが一意であるOR経度が一意である場合は、アドレスが出力配列になりたいので、あなたが現在andを持ってorオペレータが必要になります。

self.uniqueAddresses = self.uniqueAddresses.filter { $0.lat != thisUniqueAddress.lat || $0.lng != thisUniqueAddress.lng } 

ここにあなたの遊び場にしようとするテストコードがあります:

let thisUniqueAddress = (lat: 0, lng: 0) 
var uniqueAddresses:[(lat:Int,lng:Int)] = [(lat: 0, lng: 0), 
           (lat: 0, lng: 1), 
           (lat: 1, lng: 0), 
           (lat: 1, lng: 1)] 
uniqueAddresses = uniqueAddresses.filter {$0.lat != thisUniqueAddress.lat || $0.lng != thisUniqueAddress.lng} 
print(uniqueAddresses) 

.lat.lngの両方に一致する一点(0, 0)を省略し、[(0, 1), (1, 0), (1, 1)]出力します。

+0

なぜか分かりませんが、論理は何とか私の脳が何らかの形でそれを処理する方法とは何とか違います.....しかし、感謝します。これはまさに私が探していたものです。 –

+0

@ChaimFriedman知っています!それは私にあなたがそれを持っていた方法を正しく見ました。私はすべての省略形を取り出し、それが私が思ったことをしなかったことを見るために別のフィルター機能を書かなければならなかった。 – Robert