在 Objective C 中,是否有任何更简洁的方法来测试动态创建的 NSSet 的成员资格?

In Objective C, is there any cleaner way to test membership against NSSet created on the fly?

例如,我记得在 Pascal / Delphi 语言中,我们可以这样做:

if (i in [1, 2, 3, 6, 10, 11]) then

我知道在 Obj C 中我们有 NSSet 并且我们可以使用 containsObject 选择器测试成员资格。但它太冗长了。使用包装器动态创建 NSSet 仍然需要很长的代码(我必须先创建一个 NSArray 对象包装器,然后从该 NSArray 创建一个 NSSet 对象) .有没有更简洁的方法来测试 Objective C 中的成员资格,可能像:

if (i in @[@(1), @(2), @(3), @(6), @(10), @(11)]) { }

对我来说还好。

对于小型集合,仅搜索数组可能至少同样快。假设 i 是原始类型并且还不是 NSNumber:

if ([@[@(1), @(2), @(3), @(6), @(10), @(11)] containsObject:@(i)) {
    ...
}

如果你的集合真的只是一堆硬编码常量,你可以去掉其中的一些括号:

if ([@[@1, @2, @3, @6, @10, @11] containsObject:@(i)) {
    ...
}