Objective c NSMutable数组搜索重复

Objective c NSMutable数组搜索重复,objective-c,nsmutablearray,Objective C,Nsmutablearray,我有一个带有NSDictionary-3键3值的数组,我需要搜索重复的对象并对它们进行计数 第一个键-检查(1/0) 第二个键-重量(0-200) 第三个关键方法(1-6) 忽略-键检查 代码: NSMutableString*newtext=[[NSMutableString alloc]init]; NSMUTABLEARRY*original=[NSMUTABLEARRY arrayWithArray:[[u myExercise objectAtIndex:indexath.row]

我有一个带有NSDictionary-3键3值的数组,我需要搜索重复的对象并对它们进行计数

  • 第一个键-检查(1/0)
  • 第二个键-重量(0-200)
  • 第三个关键方法(1-6)
  • 忽略-键检查
代码:

NSMutableString*newtext=[[NSMutableString alloc]init];
NSMUTABLEARRY*original=[NSMUTABLEARRY arrayWithArray:[[u myExercise objectAtIndex:indexath.row]objectForKey:@“myApproach”];
NSMutableArray*myArr=[NSMutableArray arrayWithArray:[[u myExercise objectAtIndex:indexath.row]objectForKey:@“myApproach”];
对于(int i=0;i<[原始计数];i++){
整数计数=0;
对于(int j=0;j<[myArr计数];j++){
if([原始containsObject:[myArr objectAtIndex:i]]){
计数++;
NSLog(计数为%d);
[原始移除对象索引:0];
}
}
NSLog(@“%@”,原件);
NSString*myStr=[NSString stringWithFormat:@“%dⅩ%@Ⅹ%@”,计数,[[myArr objectAtIndex:i]objectForKey:@“repeat”],[[myArr objectAtIndex:i]objectForKey:@“weight”];
[newtext appendString:myStr];
}

如果我假设您希望myArr包含原始数组而不包含重复的数组:

NSMutableString *newtext = [[NSMutableString alloc] init];
NSArray *original = _myExercise[indexPath.row][@"myApproach"];
NSMutableArray *myArr = [NSMutableArray array];

// iterate over the original
for (int i = 0; i < [original count]; i++) {
    int count = 0;
    // iterate over the rest of the original
    for (int j = i + 1; j < [original count]; j++) {
        // if these items are equal…
        if ([original[i] isEqualTo:original[j]]) {
            count++;    // bump the count
            NSLog(@"нашед %d", count);
        }
    }
    if (!count) {   // if there were no dups…
        [myArr addObject:original[i]];  // add the original item to myArr
    }
    NSLog(@"%@", original);
    NSString *myStr = [NSString stringWithFormat:@"%d Х %@ Х %@", count, myArr[i][@"repeat"], myArr[i][@"weight"]];
    [newtext appendString:myStr];
}
NSMutableString*newtext=[[NSMutableString alloc]init];
NSArray*original=_myExercise[indexath.row][@“myApproach”];
NSMutableArray*myArr=[NSMutableArray];
//迭代原始文件
对于(int i=0;i<[原始计数];i++){
整数计数=0;
//迭代原始文档的其余部分
对于(int j=i+1;j<[原始计数];j++){
//如果这些项目相等…
如果([原件[i]等质量:原件[j]]){
count++;//增加计数
NSLog(计数为%d);
}
}
如果(!count){//如果没有重复…
[myArr addObject:original[i]];//将原始项添加到myArr
}
NSLog(@“%@”,原件);
NSString*myStr=[NSString stringWithFormat:@“%dⅩ%@Ⅹ%@”,计数,myArr[i][@“重复”]、myArr[i][@“重量”];
[newtext appendString:myStr];
}

以下是您可以执行的操作,创建一个新字典,其中包含复制对象的键,以及复制次数的值:

NSMutableDictionary * newDict = [NSMutableDictionary dictionaryWithCapacity:[originalDict count]];
for(id item in [originalDict allValues]){
    NSArray * keys = [originalDict allKeysForObject:item];
    if([keys count] > 1) {
      [newDict setObject:[NSNumber numberWithInteger:[keys count]] forKey:item];
    }
}

不清楚你想做什么。或者代码试图做什么。“j”指数是什么?如果原始数组包含object:myArr objectAtIndex:i,为什么总是“[original removeObjectAtIndex:0];”(因为myArr应该具有与原始数组相同的内容,所以总是这样)。这段代码基本上就是从原始代码中删除所有内容。为什么不把它放到集合中,然后再回到数组中呢?朱利安克:我在尽量减少对他发布的代码的修改。你应该把它写下来,然后把它作为一个答案贴上去……我会投赞成票的。。我很希望像LINQ这样的人能尽快来到Objective-C。。。
NSMutableDictionary * newDict = [NSMutableDictionary dictionaryWithCapacity:[originalDict count]];
for(id item in [originalDict allValues]){
    NSArray * keys = [originalDict allKeysForObject:item];
    if([keys count] > 1) {
      [newDict setObject:[NSNumber numberWithInteger:[keys count]] forKey:item];
    }
}