在Objective C中删除NSArray中的负数

时间:2013-08-21 09:38:32

标签: ios objective-c

我是Objective C的新手。在我的应用程序中,我有数据数组,其中我只需要正数并需要删除负数。

result = [NSMutableArray arrayWithObjects: @"1",@"2",@"3","-4","-5","6","9",nil];
NSLog(@"  Before Remove  %d", [result count]);
NSString *nullStr = @"-";
[result removeObject:nullStr];

如何实现这一目标?有什么指针吗?

5 个答案:

答案 0 :(得分:6)

您可以使用谓词来过滤数组

NSArray * numbers = @[@"1", @"2", @"3", @"-4", @"-5", @"6", @"9"];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"integerValue >= 0"];
NSArray * positiveNumbers = [numbers filteredArrayUsingPredicate:predicate];

结果

[@"1", @"2", @"6", @"9"]

另请注意,这适用于NSNumber个数组和NSString个数组,因为它们都采用integerValue方法。

答案 1 :(得分:2)

你写的是一个字符串数组,如果可以,你可以循环数组并删除以 - 开头的字符串

由于在迭代时无法删除对象,因此可以创建一个新数组并仅存储正数(或在循环后标记要删除和删除的项目)

NSMutableArray onlyPositives = [[NSMutableArray alloc] init]
for(int i=0; i < [result count]; i++)
{
    if(![result[i] hasPrefix:@"-"])
        [onlyPositives add:[result[i]]
}

答案 2 :(得分:0)

试试这个:

for(NSString *number in [result copy])
{
    if([number intValue] < 0)
    {
         [result removeObject:number];
    }
}

答案 3 :(得分:0)

NSIndexSet *indexesOfNegativeNumbers = [result indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [(NSString *)obj hasPrefix:@"-"];
}];

[result removeObjectsAtIndexes:indexesOfNegativeNumbers];

答案 4 :(得分:0)

如果您有一个数组,并且想要从中过滤项目,那么使用NSPredicate是一种很好的方法。

您还没有说过您的数组是否包含NSNumbers或NSStrings,因此这里演示如何在两种情况下使用谓词过滤数组

// Setup test arrays
NSArray *stringArray = @[@"-1", @"0", @"1", @"2", @"-3", @"15"];
NSArray *numberArray = @[@(-1), @0, @1, @2, @(-3), @15];

// Create the predicates 
NSPredicate *stringPredicate = [NSPredicate predicateWithFormat:@"integerValue >= 0"];
NSPredicate *numberPredicate = [NSPredicate predicateWithFormat:@"SELF >= 0"];

// Filtering the original array returns a new filtered array
NSArray *filteredStringArray = [stringArray filteredArrayUsingPredicate:stringPredicate];
NSArray *filteredNumberArray = [numberArray filteredArrayUsingPredicate:numberPredicate];

// Just to see the results, lets log the filtered arrays.
NSLog(@"New strings %@", filteredStringArray); // 0, 1, 2, 15
NSLog(@"New strings %@", filteredNumberArray); // 0, 1, 2, 15

这应该让你开始。