如何使用NSPredicate过滤数组以获得单词组合

Evg*_*y S 4 nspredicate ios

[filteredArray filterUsingPredicate:
   [NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@", searchText]];
Run Code Online (Sandbox Code Playgroud)

filteredArray包含简单的NSStrings.[你好,我的,上,下,七等...];

它将提供所有以字符串开头的字符串searchText.

但是,如果字符串将是"我的名字是"等单词的组合,和searchText = name.将一个什么NSPredicate样子来实现这一目标?

更新:如果我想要一个结果searchText = name,但如果不想要结果,它将如何searchText = ame?也许是这样的:

 [filteredArray filterUsingPredicate:
       [NSPredicate predicateWithFormat:
        @"self BEGINSWITH[cd] %@ or self CONTENTS[cd] %@", 
        searchText, searchText]];
Run Code Online (Sandbox Code Playgroud)

但它应该首先显示searchText以及包含的字符串开头的字符串searchText.

Mun*_*ndi 5

[NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", searchText];
Run Code Online (Sandbox Code Playgroud)

在扩展问题后编辑

NSArray *beginMatch = [filteredArray filteredArrayUsingPredicate:
  [NSPredicate predicateWithFormat:
    @"self BEGINSWITH[cd] %@", searchText]];
NSArray *anyMatch = [filteredArray filteredArrayUsingPredicate:
  [NSPredicate predicateWithFormat:
    @"self CONTAINS[cd] %@", searchText]];

NSMutableArray *allResults = [NSMutableArray arrayWithArray:beginMatch];
for (id obj in anyMatch) {
   if (![allResults containsObject:obj]) {
      [allResults addObject:obj];
   }
}
filteredArray = allResults;
Run Code Online (Sandbox Code Playgroud)

这将得到所需顺序的结果,没有重复的条目.