如何在对象属性上使用谓词过滤NSArray

shifu
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  [self.map removeAnnotations:self.map.annotations];
  if ([textField isEqual:self.searchText]) {
      NSPredicate *bPredicate = 
      [NSPredicate predicateWithFormat:@"name contains[c],  %@",self.searchText.text];

      self.filteredArray = [self.hotelArray filteredArrayUsingPredicate:bPredicate];
      NSLog(@" HEARE %@",self.filteredArray);
      [self markAllHotels];
  }
  return YES;
}

hotelArrayfilteredArrayNSArray

hotelArray具有类型的对象,hotel其中hotel具有属性name

问题:我想hotelArray根据hotel.name何时hotel.name匹配在searchText[文本字段]中输入的文本进行过滤,但是我得到的是空白self.filteredArray

迪彭潘查萨拉

请尝试遵循以下几行,并确保properyName区分大小写。并且您,以谓词格式放置,这就是为什么它不起作用的原因。只需将代码替换为以下代码即可。

目标C

NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@",self.searchText.text];
self.filteredArray = [self.hotelArray filteredArrayUsingPredicate:bPredicate];
NSLog(@"HERE %@",self.filteredArray);

迅速

var bPredicate: NSPredicate = NSPredicate(format: "SELF.name contains[cd] %@", self.searchText.text)
self.filteredArray = self.hotelArray.filteredArrayUsingPredicate(bPredicate)
NSLog("HERE %@", self.filteredArray)

使用迅捷 filter

var searchText = "Galaxy"

let filteredArray = hotelArray.filter { $0["name"] == searchText }
print("** Result ** \n\(filteredArray)")

斯威夫特3.0

let arrEmp = [["name": "James", "age" : 27, "city" : "New york"],
                   ["name": "Johnson", "age" : 24, "city" : "London"],
                   ["name": "Alex", "age" : 28, "city" : "Newark"],
                   ["name": "Mark", "age" : 25, "city" : "Paris"],
                   ["name": "Steve", "age" : 25, "city" : "Silicon Valley"],
                   ["name": "Lary", "age" : 28, "city" : "New york"]]

// *** Filter by Name exact match ***
var filterByName = arrEmp.filter { $0["name"] == "Mark" }
print("filterByName \(filterByName)")

// *** Filter by Age ***
var filterByAge = arrEmp.filter { $0["age"] as! Int >  25 }
print("filterByAge \(filterByAge)")

迅捷4.0

var filterByName = arrEmp.filter
do {
    $0["name"] == "Mark"
}
print("filterByName filterByName)")

var filterByAge = arrEmp.filter
do {
    $0["age"] as! Int > 25
}
print("filterByAge filterByAge)")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在对象的多个属性上使用角度滤镜

如何在对象上使用reduce

如何在对象的属性上添加属性?

如何在对象列表或对象的一个或多个属性上使用 Distinct

如何在对象上保留某些属性?

如何在对象类型文档字段的属性上使用FieldValue.increment()

如何在对象内的对象上使用 find() 方法

如何在对象内部的对象上使用Codable编码

使用对象属性从NSArray过滤重复项

如何在对象ID的基础上从对象数组中过滤出对象

如何在对象数组上使用 localStorage

如何在对象方法上使用fromEvent而不是bindCallback?

如何在对象HTMLInputElement上使用queryselector

我将如何在对象上使用localStorage

如何在对象上使用 vuejs 模块

如何在对象赋值上使用 toHaveBeenCalledWith

使用NSArray之类的谓词过滤CFArray

如何在对象上定义函数并仍然能够运行它来设置初始对象属性

如何在对象上设置 onCollisionEnter?

在对象的对象上使用多个键值过滤器?

如何在对象Javascript数组内过滤数组对象?

如何在对象电源应用程序上添加属性

如何在对象数组上使用Array.protoype.map()来基于其值过滤掉某些特定键?

如何在对象化中基于JodaTime进行过滤

如何在对象数组中过滤数组?

如何在对象数组中设置每个对象的属性?

如何在对象中合并对象的属性

如何在对象数组内移动对象属性

如何在对象内使用接口