반응형
FilteredArrayUsingPredicate가 배열에 존재하지 않습니다.
배열에 "UserDetails"구조체 개체가 있습니다. 배열에서 개체를 필터링하고 싶습니다. 그러나 Swift 배열에는 "filteredArrayUsingPredicate"옵션이 없습니다.
내 어레이 생성
var arrayOfUsers:UserDetails[] = UserDetails[]()
내 userdetails 코드는
struct UserDetails{
var userName:String
var userID:String
var userAge:String
func userDescription()->String{
return "name " + userName + "age " + userID
}
}
객체를 만드는 내 코드
for a in 1...1000{
var user:UserDetails = UserDetails(userName: "name", userID: String(a), userAge: "22")
arrayOfUsers.append(user)
}
이제 arrayOfUsers
사용자 ID가 "1"인 것을 필터링하고 싶습니다 .
Swift 배열에는 .filter
클로저를 메소드가 있습니다.
let filteredArray = arrayOfUsers.filter() { $0.userID == "1" }
폐쇄는 다양한 방법으로 단순화 할 수 있습니다. 폐쇄에 대한 전체 선언은 다음과 가변.
var filteredArray = arrayOfUsers.filter( { (user: UserDetails) -> Bool in
return user.userID == "1"
})
둘 사이의 차이점은 첫 번째는 후행 클로저 구문, 약식 인수 이름, 유형 유추 및 암시 적 반환을 사용하는 것입니다. 클로저에 대한 자세한 내용은 Apple의 Swift 문서에서 확인할 수 있습니다 .
NSPredicate를 사용할 수도 있습니다.
var customerNameDict = ["firstName":"karthi","LastName":"alagu","MiddleName":"prabhu"];
var clientNameDict = ["firstName":"Selva","LastName":"kumar","MiddleName":"m"];
var employeeNameDict = ["firstName":"karthi","LastName":"prabhu","MiddleName":"kp"];
var attributeValue = "karthi";
var arrNames:Array = [customerNameDict,clientNameDict,employeeNameDict];
var namePredicate =
NSPredicate(format: "firstName like %@",attributeValue);
let filteredArray = arrNames.filter { namePredicate.evaluateWithObject($0) };
println("names = ,\(filteredArray)");
// 구조 필터링
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 arrNames1:Array = [f1,f2];
let filteredArrayStruct = arrNames1.filter( { (user: myStruct) -> Bool in
return user.userid == "1"
})
println("filter array count = \(filteredArrayStruct.count)");
for filteredValues in filteredArrayStruct
{
println("filteredArrayStruct = ,\(filteredValues.details)");
}
사전을 필터링하는 경우 다음과 같이 할 수 있습니다.
var visitors = [["age" : 22], ["age" : 41], ["age" : 23], ["age" : 30]]
var filteredVisitors = visitors.filter({
$0["age"] < 30
})
println(filteredVisitors)
//[["age" : 22], ["age" : 23]]
속성을 필터링하는 것에도 동일하게 적용됩니다.
struct Person {
var age : Int?
init(age: Int) {
self.age = age
}
}
var eventAttendees = [Person(age: 22), Person(age: 41), Person(age: 23), Person(age: 30)]
var filteredAttendees = eventAttendees.filter({
$0.age < 30
})
자세한 내용은이 문서를 참조하세요. 사전 또는 객체 속성의 Swift 배열 필터링
3 또는 4 에서는 NSPredicate With Array를 사용할 수 있습니다.
let pred : NSPredicate = NSPredicate(format: "points_status = %@", "0")
let approvalRequestArray = approvalRequestOriginalArray.filtered(using: pred) as NSArray
let provincesStartingWithM = NSPredicate(format: "name contains [cd] 'a'")
provinces.filtered(using: provincesStartingWithM)
자세한 내용은이 링크를 참조하십시오. GitHub
결과적으로 한 번에 하나의 필터 만 필요가 없습니다. 논리 조건을 적용하여 술어의 범위를 확장 할 수 있습니다. 예를 들면 :
var foundArray = tempArray.filter{ String(describing:$0.id) .contains(searchText) ||
$0.name .contains(searchText) || $0.summary! .contains(searchText) ||
String(describing: $0.airDate).contains(searchText) || String(describing: $0.airTime).contains(searchText) ||
String(describing: $0.runTime).contains(searchText)}
챔피언처럼 작동합니다.
반응형
'ProgramingTip' 카테고리의 다른 글
T-SQL에서 비트 필드를 뒤집는 방법은 무엇입니까? (0) | 2020.11.09 |
---|---|
"Uncaught SyntaxError : Unexpected token {" (0) | 2020.11.09 |
Python2.7의 unittest에서 assertRaises ()에 의해 생성 된 오류 메시지를 표시하는 방법은 무엇입니까? (0) | 2020.11.09 |
Objective-C 카테고리로 인해 인식 할 수없는 선택기가 발생 함 (0) | 2020.11.09 |
Swift에서 shouldChangeCharactersInRange가 어떻게 작동합니까? (0) | 2020.11.09 |