【问题标题】:Find all strings in NSArray that are a particular length [closed]查找 NSArray 中所有特定长度的字符串 [关闭]
【发布时间】:2013-07-22 19:01:11
【问题描述】:

我有一个NSArray,里面有 200,000 个单词,每个单词可以有 1-10 个字符。 我想基于第一个数组创建第二个数组,只包含正好有 5 个字符的单词。

我该怎么做?

【问题讨论】:

    标签: objective-c cocoa search nsarray


    【解决方案1】:

    使用 predicatefilter the array 并生成一个仅包含长度为 5 的单词的新数组。类似于:

    NSPredicate *p = [NSPredicate predicateWithFormat:@"length == 5"];
    NSArray *fiveCharWords = [myWordList filteredArrayUsingPredicate:p];
    

    我似乎总是第一次看到predicate format 有点错误,所以如果那里有错误不要感到惊讶。关键是您应该阅读 NSPredicate 并了解如何使用谓词来过滤数组和集合等集合。

    【讨论】:

    • 谢谢!我将查看 NSPredicate 以获取更多信息。
    【解决方案2】:

    使用谓词过滤数组,其中谓词将length5 进行比较。或者循环并将适当的值复制到另一个数组中。

    【讨论】:

      【解决方案3】:

      使用您的数据模型,我将使用 For 循环并解析数据,当我在 Array1 中找到长度 > 5 的对象时,我会将其提交给 Array2。我也会先在 NSArray 和 For Loop 上搜索关于 ObjectiveC 的内容。

      使用不同的数据模型,我会将所有 Array1 数据放入 SQLLite 数据库中,以便您的应用运行得更快。

      【讨论】:

      • 谢谢,这是我最初的想法。 SQLLite 数据库似乎是一个很好的探索选择。谢谢!
      • SQLLite 路由有它的优点和缺点,如果你有一个静态数据集可能会有点过分,但它是另一种选择。我想一个更相关的说明是性能对你有多重要。如果您将数据预加载到应用程序中,则 SQLLite 是有意义的。如果您正在加载数据应用程序端,我会亲自使用 SQLLite 方法。如果数据以某种方式预加载到数组中,我会跳过 SQLLite,因为无论如何您都必须解析它并且可以轻松地将其放入 Array2 中。关于数据是静态还是动态的类似问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2012-11-06
      相关资源
      最近更新 更多