创建一个 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 作为字符串的一部分