创建一个 NSPredicate 来查找长度大于 N 的元素

Posted

技术标签:

【中文标题】创建一个 NSPredicate 来查找长度大于 N 的元素【英文标题】:Create a NSPredicate to find elements whose length is > N 【发布时间】:2012-09-09 18:33:59 【问题描述】:

我有一个字符串数组(超过 5k 个元素),每个字符串都是可变长度的。我可以使用 NSPredicate 来查找数组中的特定字符串(花了一点时间才弄清楚)。现在我需要找到长度大于 N 的元素。

我查看了文档,长度似乎不是 Predicate Programming Guide 中可用的功能之一。

提前致谢。

意象群

【问题讨论】:

为什么这被否决了?我认为用评论来解释你的反对票是一种礼貌。我猜这是因为问题没有发布代码尝试?一个更具建设性的回应(尤其是经验分数相对较低的)是要求他发布他的字符串匹配代码。向我 +1,除非有人为 -1 提供了充分的理由。 【参考方案1】:
NSArray * words= [allLinedStrings filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > %d",N]];

N 是您在问题中提到的整数。

【讨论】:

谢谢。有用。你能分享到其他谓词“功能”的链接吗?【参考方案2】:

我不熟悉 NSPredicate,所以我不能给你一个使用它的解决方案,但你不能只使用一些简单的 NSString 方法:

//This is the length of the string you want to check
int threshold = 5;

//Iterates through all elements in the array
for(int index = 0; index < [stringArray count]; index++) 

    //Checks if the length of the string stored at the current index is greater than N
    if([[stringArray objectAtIndex:index] length] > threshold) 

        //String length is greater than N
    

或者,您可以通过替换此行来添加检查数组是否只有字符串(为了安全而牺牲性能):

if([[stringArray objectAtIndex:index] length] > threshold) 

有了这个:

if([[stringArray objectAtIndex:index] length] > threshold && [[stringArray objectAtIndex:index] isKindOfClass[NSString class]]) 

这样做是为了确保当前索引处的对象是一个 NSString。如果不是,您将收到运行时错误。

【讨论】:

在调用length之前检查类。

以上是关于创建一个 NSPredicate 来查找长度大于 N 的元素的主要内容,如果未能解决你的问题,请参考以下文章

创建一个带有换行符的 NSPredicate 作为字符串的一部分

Swift:UISearchBar,通过 NSPredicate 名字或姓氏查找 Person

NSPredicate 仅查找第一个匹配项

NSPredicate == 查询

核心数据:在两个实体中查找的 NSPredicate

核心数据和 NSPredicate