过滤swift对象数组,以删除在其一个或多个属性中具有相同值的对象

ali*_*ego 2 arrays xcode filter ios swift

我有一个coreData对象的Swift数组.对象有三个属性.我想过滤数组以删除对其中2个属性共享相同值的对象.

对象属性是object.name,object.age,object.id

所有属性都是String类型.

我想过滤数组以返回一个数组,删除重复的情况,其中object.name和object.age是相同的.

Ala*_* T. 5

你可以用一套来做:

var uniqueValues = Set<String>()
objectsArray = objectsArray.filter{ uniqueValues.insert("\($0.name)|\($0.age)").inserted}
Run Code Online (Sandbox Code Playgroud)

您还可以通过扩展Array类型来概括该方法以涵盖其他组合:

extension Array
{
   func filterDuplicate<T>(_ keyValue:(Element)->T) -> [Element]
   {
      var uniqueKeys = Set<String>()
      return filter{uniqueKeys.insert("\(keyValue($0))").inserted}
   }
}

objectsArray = objectsArray.filterDuplicate{ ($0.name,$0.age) }
Run Code Online (Sandbox Code Playgroud)