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 按数组中包含的第一个字母过滤

如何使用正则表达式搜索忽略 NSPredicate 的某些字符?

NSPredicate 和 BEGINSWITH with CloudKit:字段值类型不匹配

获取城市名称不以元音开头或不以元音结尾

CloudKit - NSPredicate 用于在引用列表中查找包含多个 CKReference 的所有记录