在 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)) {
...
}
例如,我记得在 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)) {
...
}