我是Objective C的新手。在我的应用程序中,我有数据数组,其中我只需要正数并需要删除负数。
result = [NSMutableArray arrayWithObjects: @"1",@"2",@"3","-4","-5","6","9",nil];
NSLog(@" Before Remove %d", [result count]);
NSString *nullStr = @"-";
[result removeObject:nullStr];
如何实现这一目标?有什么指针吗?
答案 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
这应该让你开始。