Man*_*gan 67 swift xcode6 ios8
我在数组中有"UserDetails"结构对象.我想从数组中过滤对象.但是在Swift数组中没有"filteredArrayUsingPredicate"的选项.
我的阵列创建
var arrayOfUsers:UserDetails[] = UserDetails[]()
Run Code Online (Sandbox Code Playgroud)
我的userdetails代码是
struct UserDetails{
var userName:String
var userID:String
var userAge:String
func userDescription()->String{
return "name " + userName + "age " + userID
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码来创建对象
for a in 1...1000{
var user:UserDetails = UserDetails(userName: "name", userID: String(a), userAge: "22")
arrayOfUsers.append(user)
}
Run Code Online (Sandbox Code Playgroud)
现在我想过滤arrayOfUsers
哪一个有userID"1".
Nat*_*ook 118
Swift数组有一个.filter
关闭的方法 - 这样做:
let filteredArray = arrayOfUsers.filter() { $0.userID == "1" }
Run Code Online (Sandbox Code Playgroud)
可以通过多种方式简化闭包.关闭的完整声明看起来更像是这样的:
var filteredArray = arrayOfUsers.filter( { (user: UserDetails) -> Bool in
return user.userID == "1"
})
Run Code Online (Sandbox Code Playgroud)
两者之间的区别在于第一个是使用尾随闭包语法,速记参数名称,类型推断和隐式返回.您可以在Apple的Swift文档中阅读有关闭包的更多信息.
kar*_*agu 98
你也可以使用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)");
Run Code Online (Sandbox Code Playgroud)
//结构过滤
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)");
}
Run Code Online (Sandbox Code Playgroud)
如果您要过滤字典,可以这样做.
var visitors = [["age" : 22], ["age" : 41], ["age" : 23], ["age" : 30]]
var filteredVisitors = visitors.filter({
$0["age"] < 30
})
println(filteredVisitors)
//[["age" : 22], ["age" : 23]]
Run Code Online (Sandbox Code Playgroud)
这同样适用于过滤其属性的结构
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
})
Run Code Online (Sandbox Code Playgroud)
您可以参考这篇文章了解更多信息.过滤字典或对象属性的Swift数组
归档时间: |
|
查看次数: |
52462 次 |
最近记录: |