swift 3过滤多个"不等于"条件

时间:2016-11-21 22:38:21

标签: arrays swift3

在Swift 3中,我正在过滤并创建一个数组(在迭代现有数组时):

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

我想从新数组中仅排除那些符合BOTH条件的现有对象。这意味着如果一个物体的纬度像我的那样,它的lng也像我的那样,那么我不想在我的新阵列中使用它。但是,如果其中一个匹配它没有问题,它可能包括在内。我正在使用&&运算符给我两个条件在一起,但即使只有一个条件是真的它也符合我的条件,因此不包括在我的新数组中,这不是我想要的。我尝试将它们与括号一起分组,但我得到了相同的结果。

1 个答案:

答案 0 :(得分:2)

这只是一个布尔逻辑问题。如果纬度是唯一的或经度是唯一的,您希望地址在输出数组中,因此您需要一个or运算符,当前您有and

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)

输出[(0, 1), (1, 0), (1, 1)],省略(0, 0).lat上匹配的一个.lng