在Swift 3中,我正在过滤并创建一个数组(在迭代现有数组时):
self.uniqueAddresses = self.uniqueAddresses.filter { $0.lat != thisUniqueAddress.lat) && $0.lng != thisUniqueAddress.lng }
我想从新数组中仅排除那些符合BOTH条件的现有对象。这意味着如果一个物体的纬度像我的那样,它的lng也像我的那样,那么我不想在我的新阵列中使用它。但是,如果其中一个匹配它没有问题,它可能包括在内。我正在使用&&运算符给我两个条件在一起,但即使只有一个条件是真的它也符合我的条件,因此不包括在我的新数组中,这不是我想要的。我尝试将它们与括号一起分组,但我得到了相同的结果。
答案 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
。