在搜索中获取外部数组的索引是不是有一些objective-c魔法?

Posted

技术标签:

【中文标题】在搜索中获取外部数组的索引是不是有一些objective-c魔法?【英文标题】:Is there some objective-c magic to obtain the index of the outside array in a search?在搜索中获取外部数组的索引是否有一些objective-c魔法? 【发布时间】:2014-01-21 12:17:06 【问题描述】:

我有一个包含数组的数组。容器是这样的:

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(参见代码中的 cmets)。

我知道如何通过使用枚举来做到这一点。我正在寻找的是是否有一些魔法可以用更少的代码来做到这一点(我知道 Objective-c 有很多魔法晦涩的命令)来做各种事情)。

我知道我可以做这样的事情来获取数组,给定元素

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

但是那个数组在容器上的索引呢?

谢谢

【问题讨论】:

如果两个子数组包含您要搜索的元素怎么办?我之所以问,是因为您拥有数组数组显然是有原因的,而这可以通过拥有一组对象来管理它们的数组并且可以具有执行您需要它们执行的方法的方法来变得更容易。但这一切都取决于你做你正在做的事情的原因。 不是这样,在子数组创建过程中,我强制一个元素只存在于一个子数组中。它们在子数组中分开,因为它们代表不同的事物,它们分别使用它们的元素,这使得该任务的代码变得简单。 这里没有魔法(但有文档)。 【参考方案1】:

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

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

【讨论】:

哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇!!!!!!!极好的!我知道会显示一些魔法命令!!!!你是个天才!谢谢!【参考方案2】:

您可以使用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]]);

【讨论】:

在过滤行出现此错误:未捕获的异常 'NSInvalidArgumentException',原因:'Can't use in/contains operator with collection 1 (not a collection)' @DesperateDeveloper:我的错,我用的是你的代码而不是我的,请检查我更新的代码 @DesperateDeveloper:实际上 NSPredicate 的条件应该是 ANY SELF == %@,我从您的问题中复制了该代码并忘记更改条件:)

以上是关于在搜索中获取外部数组的索引是不是有一些objective-c魔法?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数组Objective-C中每个项目的索引

Elasticsearch:获取 nested 类型数组中的所有元素

Elasticsearch:获取 nested 类型数组中的所有元素

在 numpy 数组中搜索元素的索引

php 中 判断数组中是不是有值

全文索引和搜索速度