ios – 搜索字典数组中的字符串数组

ios – 搜索字典数组中的字符串数组,第1张

概述我有一组需要在另一个字典数组中搜索的组合 字典数组如下: self.listOfAllContacts ({ name = "William"; recordId = 541;},{ name = "Soan"; recordId = 541;},{ name = "kamal"; recordId = 541;},{ name 我有一组需要在另一个字典数组中搜索的组合

字典数组如下:

self.listofAllContacts

({    name = "William";    recordID = 541;},{    name = "Soan";    recordID = 541;},{    name = "kamal";    recordID = 541;},{    name = "Elisia";    recordID = 541;},{    name = "Ben";    recordID = 541;},{    name = "Loki";    recordID = 541;},{    name = "Fraser";    recordID = 541;});

组合数组如下:数组命名为

self.arrayOfSearchCombinationsFormed

<__NSArrayM 0x1702518b0>(    ABCD,JK,AND,MIKE,Eli,STEV,FRASE,WIIliA    )

目前的工作守则:

self.filteredContacts = [[NSMutableArray alloc] init];    NSArray *arrayToTraversed = [[NSArray alloc] initWithArray:self.arrayOfSearchCombinationsFormed];    for(Nsstring *combination in arrayToTraversed){        nspredicate *predicateInsIDeLoop = [nspredicate predicateWithFormat:@"name CONTAINS[cd] %@",combination];        NSArray *filteredContactByname = [self.listofAllContacts filteredArrayUsingPredicate:predicateInsIDeLoop];        if([filteredContactByname count]>0){            [self.filteredContacts addobjectsFromArray:filteredContactByname];        }        else{            [self.arrayOfSearchCombinationsFormed removeObject:combination];        }    }

目前,这种解决方案效率低下并且消耗大量内存.
任何帮助,将不胜感激.

另请注意,需要从组合数组中删除字典中未找到的任何组合.

所以我的问题是我想要在内存分配方面搜索名称的最有效方法.因此它使用最少的内存.

解决方法 使用(nspredicate *)predicateWithBlock:方法加速搜索可能会有所帮助.

假设您有一个键阵列和一个源数组,您想要使用keys数组过滤源数组.

NSArray *keysArray = @[@"1",@"2",@"3"];    NSArray *sourceArray = @[@"12",@"3",@"1",@"2"];

对于sourceArray中的第一个对象@“12”,查看keysArray,因为@“12”包含@“1”,您可以停止过滤并保留两个数组的第一个对象.但是原始代码使用@“1”来过滤sourceArray,结果是@“12”和@“1”,需要检查每个元素.

您可以参考以下代码:

- (voID)searchWithBlock:(NSArray*)keysArray{    NSDate *beginDate = [NSDate date];    NSMutableSet *keySet = [NSMutableSet set];    nspredicate *intersectPredicate = [nspredicate predicateWithBlock:^BOol(ID evaluatedobject,NSDictionary *bindings) {        for (Nsstring *str in keysArray) {            Nsstring *name = evaluatedobject[@"name"];            NSRange r = [name rangeOfString:str options:NSCaseInsensitiveSearch];            if (r.location != NSNotFound) {                [keySet addobject:str];                return true;            }        }        return false;    }];    NSArray *intersect = [self.listofAllContacts filteredArrayUsingPredicate:intersectPredicate];    self.filteredContacts = [[NSMutableArray alloc] initWithArray:intersect];    self.arrayOfSearchCombinationsFormed = [NSMutableArray arrayWithArray:[keySet allObjects]];    NSDate *endDate = [NSDate date];    NSTimeInterval interval = [endDate timeIntervalSinceDate:beginDate];    NSLog(@"interval is %f",interval);    NSLog(@"intersect %@\n,filtered key array is %@\n",intersect,keySet);}

它需要大约原始时间的1/3进行过滤,内存分配稍微少一些.我建议你将较大的数据源拆分为较小的块以使用较少的内存.

总结

以上是内存溢出为你收集整理的ios – 搜索字典数组中的字符串数组全部内容,希望文章能够帮你解决ios – 搜索字典数组中的字符串数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1044944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存