如何根据NSIndexPaths数组从NSArray中选择元素

时间:2014-03-09 12:06:03

标签: ios objective-c nsarray nsindexpath nsindexset

是否有一种快速方法可以从UITableViewNSArray NSIndexPaths)返回的数组中获取索引的所有元素。

例如:

[self.dataSourceArray selectItemsAt:[self.tableView indexPathsForSelectedItems]]

3 个答案:

答案 0 :(得分:3)

没有内置方法,但您可以简单地循环选定的行 (假设只有一个部分)并添加相应的元素 到一个可变数组:

NSMutableArray *selectedObjects = [NSMutableArray array];
for (NSIndexPath *indexPath in [self.tableView indexPathsForSelectedRows]) {
    [selectedObjects addObject:self.dataSourceArray[indexPath.row]];
}

答案 1 :(得分:-1)

使用NSArray的objectsAtIndexes:方法。

NSMutableIndexSet *mutableIndexSet = [[NSMutableIndexSet alloc] init];

// Add all indexes to NSMutableIndexSet
for (int i = 0; i < [self.tableView indexPathsForSelectedRows].count; i++) {
    [mutableIndexSet addIndex: ((NSIndexPath *) [self.tableView indexPathsForSelectedRows][i]).row];
}

[self.dataSourceArray objectsAtIndexes:mutableIndexSet];

答案 2 :(得分:-1)

你正在寻找的是Lambda

有两种方法

你可以在链接中找到它

Does Objective-C have List Lambda Query like C#?

它看起来应该是这样的

NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
       for(NSIndexPath i in [self.tableView indexPathsForSelectedItems]){
                if(i.row == evaluatedObject.row){
                   return YES;
                }
        }
       return NO;
}];
NSArray *result = [self.dataSourceArray filteredArrayUsingPredicate:p];