3

我有这样的数组:

(
  {
    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;
  },
)

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

帮我解决这个问题。

谢谢,

4

5 回答 5

7

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

A:

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

乙:

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

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]);
}

丁:

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]);

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]);
于 2013-08-05T06:54:47.730 回答
1

试试这样

 NSIndexSet *indices = [questionSections indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
        return [[obj objectForKey:@"period_id"] isEqualToString:@"2"];
    }];
     NSArray *filtered = [questionSections objectsAtIndexes:indices];

    NSLog(@"duplictae:%d\n %@",[indices count],filtered);

运单:-

duplicate: 3
 (
        {
        name = bbbb;
        "period_id" = 2;
    },
        {
        name = ccccc;
        "period_id" = 2;
    },
        {
        name = ddddd;
        "period_id" = 2;
    }
)
于 2013-08-05T06:07:06.457 回答
0

您也可以使用NSPredicate检查重复。

试试这个例子:

NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"period_id.intValue == %d",value];
NSMutableArray *data = [[NSMutableArray alloc] init];
NSArray *testArray= [yourArray filteredArrayUsingPredicate:testPredicate];
NSLog(@"duplicate:%d",[testArray count]);
于 2013-08-05T06:47:54.977 回答
0

如果数组已排序,就像您的情况一样,只需检查下一项是否与此项具有相同的值

for(int i = 0; i < array.size() - 1; i++) {
    if (array[i].id == array[i + 1].id) {
        // Duplicate
    }
}

如果你只是想知道id = 2

int idCount = 0;
for(int i = 0; i < array.size() - 1; i++) {
    if (array[i].id == 2) {
        idCount++;
    }
}

如果你也想知道位置

int idCount = 0;
int idarr[array.size()];
for(int i = 0; i < array.size() - 1; i++) {
    if (array[i].id == 2) {
        idarr[idCount++] = i;
    }
}
于 2013-08-05T06:08:20.640 回答
0

我认为这是我收集到的JSON响应。是的,您可以获得period_id。将所有period_id添加到NSMutableArray.

然后只需从该数组中搜索period_id以使period_id的值相同。您将获得period_id相同的索引。

 NSSet *uniqueElements = [NSSet setWithArray:myArray];

for(id element in uniqueElements) {
  // iterate here
}
于 2013-08-05T06:09:05.607 回答