Bạn cũng có thể lọc Struct mảng cũng
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)
Đối với Set, bạn phải tuân theo giao thức Hashable
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)
Nguồn
2017-02-02 21:43:18
Giải thích tuyệt vời! Tôi đã sử dụng 'Set' và' NSCountedSet', nhưng điều này có vẻ như nó sẽ làm nhiều thứ giống như vậy với ít dòng mã hơn. – Adrian