1

私はObjective Cを初めて使用します。私のアプリケーションでは、正の数のみが必要で負の数を削除する必要があるデータの配列があります。

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

これを達成する方法は?ポインタはありますか?

4

5 に答える 5

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"]

また、これはNSNumbers の配列と s の配列のNSString両方で機能することに注意してください。どちらもintegerValueメソッドを備えているためです。

于 2013-08-21T10:26:23.637 に答える
2

あなたが書いたものは文字列の配列です。それでよければ、配列をループして、- を使用して始まる文字列を削除できます

反復中にオブジェクトを削除することはできないため、新しい配列を作成して正の数のみを格納できます (または、削除する項目をマークしてループ後に削除します)。

NSMutableArray onlyPositives = [[NSMutableArray alloc] init]
for(int i=0; i < [result count]; i++)
{
    if(![result[i] hasPrefix:@"-"])
        [onlyPositives add:[result[i]]
}
于 2013-08-21T09:46:43.950 に答える
0

これを試して:

for(NSString *number in [result copy])
{
    if([number intValue] < 0)
    {
         [result removeObject:number];
    }
}
于 2013-08-21T10:00:35.710 に答える
0
NSIndexSet *indexesOfNegativeNumbers = [result indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [(NSString *)obj hasPrefix:@"-"];
}];

[result removeObjectsAtIndexes:indexesOfNegativeNumbers];
于 2013-08-21T10:07:17.257 に答える
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

これで始められるはずです。

于 2013-08-21T10:17:43.177 に答える