在iPhone sdk中搜索数组中的值

use*_*811 3 arrays iphone objective-c ios

我有这样的数组:

(
  {
    id=1;
    Title="AAAA";
    period_id=1;
  },
  {
    id=2;
    Title="BBBB";
    period_id=2;
  },
  {
    id=3;
    Title="CCCC";
    period_id=2;
  },
  {
    id=4;
    Title="DDDD";
    period_id=2;
  },
  {
    id=5;
    Title="EEEE";
    period_id=3;
  },
)
Run Code Online (Sandbox Code Playgroud)

问题:我怎么知道Period_id=2阵列中有多次?

帮我解决这个问题.

谢谢,

The*_*ger 7

有很多方法可以做到这一点,其中一些是在这里..

A:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"period_id == %@", @"2"];
NSArray *newArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"%d", [newArray count]);
Run Code Online (Sandbox Code Playgroud)

B:

NSMutableArray *newArray = [[NSMutableArray alloc] init];
for (id obj in array)
{
    if([obj[@"period_id"] isEqualToString:@"2"]){
        [newArray addObject:obj];
    }
}
NSLog(@"%d", [newArray count]);
Run Code Online (Sandbox Code Playgroud)

C:

NSArray *allIds = [array valueForKey:@"period_id"];
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:allIds];
for (id item in set)
{
    NSLog(@"period_id=%@, Count=%d", item,[set countForObject:item]);
}
Run Code Online (Sandbox Code Playgroud)

d:

NSArray *allIds = [array valueForKey:@"period_id"];
__block NSMutableArray *newArray = [[NSMutableArray alloc] init];
NSString *valueToCheck = @"2";
[allIds enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   if([obj isEqualToString:valueToCheck])
       [newArray addObject:obj];
}];
NSLog(@"%d", [newArray count]);
Run Code Online (Sandbox Code Playgroud)

E:

NSIndexSet *indexes = [array indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [[obj objectForKey:@"period_id"] isEqualToString:@"2"];
}];
NSArray *newArray = [array objectsAtIndexes:indexes];
NSLog(@"%d", [newArray count]);
Run Code Online (Sandbox Code Playgroud)