objective-c - 生成此字符串的最佳方法是什么? (NSMutableString...)

标签 objective-c cocoa-touch ios nspredicate nsmutablestring

我有一个字典,它的键是 NSStrings,它的对象是 NSArray。这是一个例子:

key (NSString) : GroupA 
value (NSArray): John
                 Alex
                 Joe
                 Bob

这样的条目很多,这只是一个例子。我需要做的是生成这样的字符串(例如:

(GroupA contains[cd] ('John' OR 'Alex' OR 'Joe' OR 'Bob')) AND (GroupB contains[cd] ('Starcraft' OR 'WOW' OR 'Warcraft' OR 'Diablo')) AND ..... 

我将把这个字符串提供给 NSPredicate。生成此字符串的最佳方法是什么?我可以使用 for 循环以及 if 和所有这些,但是有更优雅的方法吗? 谢谢。

最佳答案

这不是一个有效的谓词格式字符串,所以即使你最终生成了它,你也无法将它转换成一个 NSPredicate

这是你想要的:

NSDictionary *groupValuePairs = ....;

NSMutableArray *subpredicates = [NSMutableArray array];
for (NSString *group in groupValuePairs) {
  NSArray *values = [groupValuePairs objectForKey:group];
  NSPredicate *p = [NSPredicate predicateWithFormat:@"%K IN %@", group, values];
  [subpredicates addObject:p];
}

NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];

这并不像您的原文所暗示的那样不区分大小写和变音符号。如果您真的需要它,那么您将需要变得更复杂一些:

NSDictionary *groupValuePairs = ....;

NSMutableArray *subpredicates = [NSMutableArray array];
for (NSString *group in groupValuePairs) {
  NSArray *values = [groupValuePairs objectForKey:group];
  NSMutableArray *groupSubpredicates = [NSMutableArray array];
  for (NSString *value in values) {
      NSPredicate *p = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", group, value];
      [groupSubpredicates addObject:p];
  }
  NSPredicate *p = [NSCompoundPredicate orPredicateWithSubpredicates:groupSubpredicates];
  [subpredicates addObject:p];
}

NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];

关于objective-c - 生成此字符串的最佳方法是什么? (NSMutableString...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220614/

相关文章:

iphone - UIScrollView 和图像缩略图

ios - 如何以编程方式设置划分为多个部分的静态表中的单元格

objective-c - xcode 4.6 中的 UIViewController 子类在哪里

iphone - Objective-c 指针

ios - swift 4.0 中的 Storyboard本地化

ios - UIView 弹跳?

iphone - 在 DrawRect 方法中收到内存警告

iOS – 本地化的 JSON 资源

iphone - iPhone (iOS) 的 7-ZIP (LZMA) 压缩

ios - 不使用 navigationController 的 SWrevealViewController