有没有一些Objective-C魔术可以在搜索中获得外部数组的索引?

问题描述:

我有一个包含数组的数组。所述容器是这样的:有没有一些Objective-C魔术可以在搜索中获得外部数组的索引?

NSArray *container = @[ 

@[ @(12), @(23), @(34), @(11)], // index 0 
@[ @(32), @(12), @(12), @(78)], // index 1 
@[ @(14), @(97), @(45), @(82)], // index 2 
@[ @(67), @(20), @(46), @(12)], // index 3 

] 

所有内部阵列具有相同数量的元素。

假设我想查看@(45)是否存储在容器内的任何数组上,如果是正数,则获取该子数组的索引,在这种情况下索引为2(请参见代码中的注释)。

我知道如何使用枚举。我在寻找的是如果有一些魔法可以用少量代码来做到这一点(我知道objective-c有很多不可思议的命令)来做所有事情)。

我知道我可以做这样的事情,得到的阵列,给出的元素

NSString *search = @(45); 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF CONTAINS %@", search]; 
NSArray *array = [container filteredArrayUsingPredicate: predicate]; 
NSLog(@"result: %@", array); 

但对于容器对数组的索引?

感谢

+0

如果两个子阵列包含的元素你正在寻找?我在问,因为你拥有数组数组显然是有原因的,通过拥有一组管理数组的对象数组,可以使这些数组变得更容易,并且这些数组可以有你需要的方法。但这一切都取决于你在做什么的理由。 – Abizern

+0

并非如此,在子数组创建过程中,我强制要求一个元素只出现在一个子数组中。它们在子数组中是分开的,因为它们表示不同的事物,它们分开使用它们的元素,并使代码对于该任务变得简单。 – SpaceDog

+0

你是怎么做到的? – Abizern

NSArrayindexOfObjectPassingTest:方法可以返回对象的第一个索引符合条件:

int value = 12; 
NSUInteger idx = [container indexOfObjectPassingTest: 
    ^BOOL (NSArray* subArray, NSUInteger idx, BOOL *stop) { 
     return *stop = [subArray containsObject:@(value)]; 
}]; 
+0

WHOOOOOOOOOOOOOOOOOOOOOOOOOOOOAAAAAAAAAAAAA !!!!!!!!太棒了!我知道一些魔法命令会显示!你是个天才!谢谢! – SpaceDog

你可以使用indexOfObject:方法数组中的对象的索引。

你可以不喜欢它:

NSString *search = @(45); 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", search]; 

// Filtered is an array which contains the result (Means the filtered array contains the index 2 array - array of array) 
NSArray *filtered = [container filteredArrayUsingPredicate: predicate]; 

// Using `indexOfObject:` method for getting the result 
NSLog(@"Index %d", [container indexOfObject:[filtered objectAtIndex:0]]); 
+0

在过滤的行上得到这个错误:未捕获异常'NSInvalidArgumentException',原因:'不能在集合1(不是集合)中使用/包含运算符' – SpaceDog

+0

@DesperateDeveloper:我的错误,我用你的代码而不是我的,请检查我的更新代码 –

+0

@DesperateDeveloper:实际上NSPredicate的条件应该是'ANY SELF ==%@',我从你的问题中复制了该代码并忘记改变条件:) –