How To Filter Array Using Element in Another Array in Swift?
Use Set Operations
Set(toBeFiltered).intersection(Set(theFilter))
You can also filter Struct array as well
struct myStruct { var userid:String; var details:String; init() { userid = "default value"; details = "default"; } }; var f1 = myStruct(); f1.userid = "1"; f1.details = "Good boy"; var f2 = myStruct(); f2.userid = "2"; f2.details = "Bad boy"; var f3 = myStruct(); f3.userid = "3"; f3.details = "Gentleman"; var arrNames1:Array = [f1,f3]; var arrNames2:Array = [f3,f1,f2]; let filteredArrayStruct = arrNames1.filter( { (user: myStruct) -> Bool in return arrNames2.contains({ (user1: myStruct) -> Bool in return user.userid == user1.userid; }) })print(filteredArrayStruct)
For Set you must conforms the Hashable protocol
class mytestclass: Hashable{ var userid:Int ; var details:String; var hashValue: Int { return self.userid } init(userid: Int, details:String) { self.userid = userid; self.details = details; }}func ==(lhs: mytestclass, rhs: mytestclass) -> Bool { return lhs.userid == rhs.userid}var t1 = mytestclass(userid: 1,details: "Good boy");var t2 = mytestclass(userid: 2,details: "bad boy");var t3 = mytestclass(userid: 3,details: "gentle man");var classArrayNames:Set<mytestclass> = [t1,t2];var classArrayNames2:Set<mytestclass> = [t3,t1,t2]; let result = Set(classArrayNames).intersect(classArrayNames2)