NSPredicate 查找标题键以元音开头的所有对象
Posted
技术标签:
【中文标题】NSPredicate 查找标题键以元音开头的所有对象【英文标题】:NSPredicate to find all objects whose title key starts with a vowel 【发布时间】:2015-05-05 18:10:14 【问题描述】:我有一组具有title
属性(NSString
)的对象。我想检索所有title
以元音开头的对象。我想我可以为每个字母使用NSPredicate
并将它们与NSCompoundPredicate
结合起来,但我正在寻找更优雅的东西。
有没有办法将BEGINSWITH[cd]
与IN
组合并传递一个元音NSSet
?
还有更好的选择吗?
创建一堆谓词然后将它们组合起来看起来既麻烦又丑陋。
【问题讨论】:
【参考方案1】:您不需要使用公认的冗长NSCompoundPredicate
。我认为只写一个长格式字符串是最实用的。
[NSPredicate predicateWithFormat:
@"title beginswith[cd] 'a' OR "
@"title beginswith[cd] 'e' OR "
@"title beginswith[cd] 'i' OR "
@"title beginswith[cd] 'o' OR "
@"title beginswith[cd] 'u'", title];
复制粘贴花了我大约 30 秒。
但是,我认为这不会很好。也许您想考虑通过添加布尔属性startsWithVowel
并在title
的设置器中更新它来创建派生属性。
-(void)setTitle:(NSString)value
[self willChangeValueForKey:@"title"];
[self setPrimitiveTitle:value];
[self didChangeValueForKey:@"title"];
BOOL result = // your vowel logic
self.startsWithVowel = @(result);
【讨论】:
【参考方案2】:您也可以使用带有正则表达式的谓词:
[NSPredicate predicateWithFormat:@"title MATCHES[c] %@", @"[aeiou].*"]
【讨论】:
以上是关于NSPredicate 查找标题键以元音开头的所有对象的主要内容,如果未能解决你的问题,请参考以下文章
如何编写一个函数,将句子中每个单词开头的所有辅音字符串转换为“r”,直到它变成元音?
如何使用正则表达式搜索忽略 NSPredicate 的某些字符?