Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用dictionary中的键值从NSMutableArray中搜索NSDictionary对象_Ios_Nsmutablearray_Nsdictionary - Fatal编程技术网

Ios 如何使用dictionary中的键值从NSMutableArray中搜索NSDictionary对象

Ios 如何使用dictionary中的键值从NSMutableArray中搜索NSDictionary对象,ios,nsmutablearray,nsdictionary,Ios,Nsmutablearray,Nsdictionary,我有一个数组,其中包含nsdictionary [ { "ObjectId": 20, "ObjectName": "Leave Request", "RequestItems": [] "ClassName": "req-auth" }, { "ObjectId": 22, "ObjectName": "Cancel Leave Request", "RequestItems": [] "ClassName": "re

我有一个数组,其中包含
nsdictionary

[
  {
    "ObjectId": 20,
    "ObjectName": "Leave Request",
    "RequestItems": []
    "ClassName": "req-auth"
  },
  {
    "ObjectId": 22,
    "ObjectName": "Cancel Leave Request",
    "RequestItems": []
    "ClassName": "req-auth"
  }
我想签入此数组
请假
取消请假
对象可用。因此,我将通过
ObjectName
搜索对象。但我不明白如何使用这些对象的1值来搜索这些对象。请帮帮我。 谢谢你试试这个

NSString *searchString = @"Cancel";
    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        return [evaluatedObject[@"ObjectName"] localizedCaseInsensitiveContainsString:searchString];
}];
    filteredContentList = [NSMutableArray arrayWithArray:[searchListValue filteredArrayUsingPredicate:predicate]];

您可以尝试使用
NSPredicate
。大概是这样的:

-(NSArray *)array:(NSArray *)array filteredWithString:(NSString *)string{

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.ObjectName CONTAINS[cd] %@",string];

    return [array filteredArrayUsingPredicate:predicate];
}
只需传入数组以使用您希望筛选它的字符串进行筛选,并在您希望筛选它的位置调用它


有几件事:这里的
cd
用于执行不区分大小写的比较,如果希望它区分大小写,只需从字符串中删除
cd
ObjectName
是要根据其进行筛选的属性。如果要进行精确比较,可以将
包含
更改为
类似

如果只想从数组中的每个字典中提取
对象名
,请执行以下操作:

   for dict in arrayOfData{
        if let strObjectName : String = dict["ObjectName"] as? String{
        print(strObjectName)
        }
   }

您与问题相关的问题已被多次回答。您可以创建一个函数,其中以字符串形式传递给OP,以仅获取他想要的
ObjectName
中的值。然后在where子句中使用这个字符串,如果让strObjectName=dict[“ObjectName”]作为?字符串strObjectName.contains(“取消”),然后将字典追加到新数组中