ios - 使用 Predicate 从 NSArray 中搜索
<p><p>我当前的数组如下所示。我为 sectionIndex 表创建了这个数组格式。所以我可以从数组中搜索并使用索引表显示搜索文本。</p>
<pre><code>arrContent = (
{
key = A;
value = (
Ac,
Acting
);
},
{
key = B;
value = (
Basketball,
Baseball
);
},
{
key = C;
value = (
Cat
);
}
{
key = P;
value = (
Panda,
Peacock
);
}
)
</code></pre>
<p>我的搜索代码如下所示。它工作正常。</p>
<pre><code>-(void)searchText:(NSString *) text
{
;
for (int i = 0; i < ; i++)
{
NSMutableArray *temp = [init];
NSMutableArray *arrFind = arrContent[@"value"];
for (int j = 0; j < ; j++)
{
NSString *str = arrFind;
// containsString: method find my string if its available within range
if ()
;
}
if ()
{
[@"key"],@"value":temp}];
}
}
NSLog(@"Search : %@",text);
NSLog(@"arrSearch : %@",arrSearch);
}
</code></pre>
<p>我得到如下输出。这是正确的。</p>
<pre><code>Search : ac
arrSearch : (
{
key = A;
value = (
Ac,
Acting
);
},
{
key = P;
value = (
Peacock
);
}
)
</code></pre>
<p>我只是想问是否有更好的方法来使用 <strong>NSPredicate</strong> 搜索并获得相同的输出,因为当大量数据时 for 循环会花费时间。</p>
<p>希望得到帮助。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你可以像这样使用 NSArray 的内置函数...</p>
<pre><code>- (NSArray *)filterArrayUsingText:(NSString *)text
{
NSMutableArray *filteredWordArray = ;
for (NSDictionary *dictionary in yourWordArray) {
NSArray *filteredWords = usingText:text];
if (filteredWords) {
, @"value", filteredWords}];
}
}
return filteredWordArray;
}
- (NSArray *)filterWordsFromArray:(NSArray *)wordArray usingText:(NSString *)text
{
NSPredicate *predicate = [NSPredicate predicateWithBlock:^(NSString *theWord, NSDictionary *bindings) {
return ;
}];
NSArray *filteredArray = ;
return filteredArray.count == 0 ? nil : filteredArray;
}
</code></pre>
<p>另外,请确保使用现代 Obj-C 语法。</p>
<p>此外,数据的存储方式也有些困惑。对于键/值对,您不存储 <code>Key</code> 和 <code>Value</code>。</p>
<p>你会这样存储...</p>
<pre><code>{
A: (Ac,
Acting),
B: (Basketball,
Baseball),
C: (Cat),
P: (Panda,
Peacock)
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 使用 Predicate 从 NSArray 中搜索,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25739083/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25739083/
</a>
</p>
页:
[1]