菜鸟教程小白 发表于 2022-12-13 01:43:07

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 &lt; ; i++)
{
    NSMutableArray *temp = [init];
    NSMutableArray *arrFind = arrContent[@&#34;value&#34;];
    for (int j = 0; j &lt; ; j++)
    {
      NSString *str = arrFind;
      // containsString: method find my string if its available within range
      if ()
            ;
    }

    if ()
    {
      [@&#34;key&#34;],@&#34;value&#34;:temp}];
    }
}
NSLog(@&#34;Search : %@&#34;,text);
NSLog(@&#34;arrSearch : %@&#34;,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) {
            , @&#34;value&#34;, 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]
查看完整版本: ios - 使用 Predicate 从 NSArray 中搜索