菜鸟教程小白 发表于 2022-12-12 09:58:24

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 ( &gt; 0) {
            NSPredicate *pred = %@&#34;, word];
            ;
      }
    }
    NSPredicate *predicate = ;
    NSLog(@&#34;%@&#34;, 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 %@&#34;, word1, word1];
    }
    else if (words.count == 2) {
      word1 = ];
      word2 = ];
      predicate = %@ AND SELF CONTAINS %@&#34;, word1, word2];
    }
    else if (words.count == 3) {
      word1 = ];
      word2 = ];
      word3 = ];
      predicate = %@ AND SELF CONTAINS %@ AND SELF CONTAINS %@&#34;, 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]
查看完整版本: ios - NSPredicate SELF CONTAINS[c] 首先返回包含在较长文本中的值