搜索一系列词典

ing*_*por 3 iphone search xcode objective-c nsmutablearray

我正在制作一个iPhone应用程序,显示有关红葡萄酒的信息.这些葡萄酒储存在含有一系列字典的plist中.我正在向应用程序添加一个搜索视图控制器,并且为了轻松启动我想要获得"Name"键的值包含 nameString(来自文本框)的葡萄酒.

它有点停在这里,我需要一些关于最合适的方法的建议.NSArray类中是否有一个函数可以执行此任务,应该引入NSPredicate,NSUserDefaults,还是有其他选项?我做了一些研究,但我需要一些建议,也许是一个开始的例子.

我将推进搜索功能,让用户包括/排除国家,获得适合这种和那种食物的葡萄酒,设定最低价格,最高价格等.字典包含所有这些信息的字符串.所以在我开始这样的高级之前,我需要一些建议,哪些功能可以最好地完成我的工作.

-(IBAction)searchButtonPoke:(id)sender{

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Wines" ofType:@"plist"];
    allObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

    NSString *nameString = [NSString stringWithFormat:@"%@", [nameTextField text]];

    resultObjectsArray = /*objects where the value for the key "Name" contains
                                                                   nameString*/;
Run Code Online (Sandbox Code Playgroud)

ank*_*nka 10

如何简单地遍历数组并比较名称?

resultObjectsArray = [NSMutableArray array];
for(NSDictionary *wine in allObjectsArray)
{
   NSString *wineName = [wine objectForKey:@"Name"];
   NSRange range = [wineName rangeOfString:nameString options:NSCaseInsensitiveSearch];
   if(range.location != NSNotFound)
     [resultObjectsArray addObject:wine];
}
Run Code Online (Sandbox Code Playgroud)

Swift版本更简单:

let resultObjectsArray = allObjectsArray.filter{
    ($0["Name"] as! String).range(of: nameString,
                                  options: .caseInsensitive,
                                  range: nil,
                                  locale: nil) != nil
}
Run Code Online (Sandbox Code Playgroud)

干杯,安卡


小智 7

这个工作!!! 测试!!!

for (NSDictionary* dict in Array) {

    if ([[dict objectForKey:@"key"] isEqualToString:string]) {

        Index = [Array indexOfObject:dict];
    }
}
Run Code Online (Sandbox Code Playgroud)