ios - NSPredicate SELF CONTAINS[c] 首先返回包含在较长文本中的值
<p><p>我正在使用 UISearchBar 对 UITableView 进行排序。表格中填充的数组中的每个值最多可以包含 3 个单词</p>
<p>@“菠萝”,@“菠萝绿”,@“苹果绿”,@“苹果绿,生”...</p>
<p>我在下面使用 NSPredicate 方法:</p>
<pre><code> NSArray *words = ;
NSMutableArray *predicateList = ;
for (NSString *word in words) {
if ( > 0) {
NSPredicate *pred = %@", word];
;
}
}
NSPredicate *predicate = ;
NSLog(@"%@", predicate);
</code></pre>
<p>它可以工作,但它不会按最近的相对值对值进行排序,而是始终按其索引从数组中获取第一个匹配值。这意味着,如果我想找到“apple”并在 SearchBar 中输入它,结果将是:</p>
<pre><code>Pineapple
Pineapple Green
Apple
Apple Green
</code></pre>
<p>我不能使用谓词BEGINSWITH,因为如果我搜索“青苹果”,结果将是空白的。在这种特殊情况下,我可以使用升序对结果进行排序,但在另一种情况下,例如 TEA,它将不起作用,因为字符串“TEA”包含在其他单词中,例如 STEAM,并且会排在第一位。 </p>
<p>我这里没有选项,有没有办法根据搜索得到逻辑结果输出?如果要查找“Apple”:</p>
<pre><code>Apple
Apple Green
</code></pre>
<p>//-------添加</p>
<p>感谢您的回复。我正在考虑自定义逻辑并想出了这个。我确信它是脏代码并且可以改进,但现在它的性能要好得多。它仍然没有以有组织的方式显示结果,但是搜索现在包含所有相关的项目,无论您以什么顺序输入搜索:</p>
<pre><code>NSArray *words = ;
NSString *word1;
NSString *word2;
NSString *word3;
NSPredicate *predicate;
if (words.count == 1) {
word1 = ];
predicate = %@ OR SELF LIKE %@", word1, word1];
}
else if (words.count == 2) {
word1 = ];
word2 = ];
predicate = %@ AND SELF CONTAINS %@", word1, word2];
}
else if (words.count == 3) {
word1 = ];
word2 = ];
word3 = ];
predicate = %@ AND SELF CONTAINS %@ AND SELF CONTAINS %@", word1, word2,word3];
}
NSArray *sortedArray = ;
filteredTableData = ;
</code></pre>
<p>如果有人知道如何对结果进行排序以获得最接近的匹配,请分享。谢谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>解决此问题的一种方法是将谓词应用于 NSSet 而不是 NSArray。像这样的:</p>
<pre><code> NSSet *tempSet = ;
tempSet = ;
resultsArray = ;
</code></pre>
<p>希望这会有所帮助。</p></p>
<p style="font-size: 20px;">关于ios - NSPredicate SELF CONTAINS 首先返回包含在较长文本中的值,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/34383044/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/34383044/
</a>
</p>
页:
[1]