从数据数组中提取唯一对象

时间:2012-12-22 08:07:44

标签: iphone objective-c ios xcode ipad

我想仅在数据数组中以前不存在名称时才在数据数组中添加名称。当我试图打印这些名字时,我会重复这些。有办法解决这个问题吗?

-(NSMutableArray *)autoComplete
{
    NSMutableArray *dataArray = [[NSMutableArray alloc] init];

    NSString *url = [NSString stringWithFormat:@"%@45.25,-95.25&limit=100&client_id=Von0J4Bu6INiez5bGby2R&client_secret=50sUjSbg7dba8cQgtpdfr5Ns7wyYTqtmKpUU3khQ",kWSURL];
    NSDictionary * returnDict = (NSDictionary *) [self callWebService:url];
    if([returnDict objectForKey:@"success"])
    {
       NSArray *responceArray = [returnDict objectForKey:@"response"];
        for (NSDictionary *dict in responceArray) {

             placeDC *place = [[placeDC alloc]init];
            NSDictionary *placeDict = (NSDictionary *)[dict objectForKey:@"place" ];
            NSDictionary *loctionDict =(NSDictionary *)[dict objectForKey:@"loc"];
            NSString * name =[placeDict objectForKey:@"name"];
            NSString * stateFull =[placeDict objectForKey:@"stateFull"];
            NSString * countryFull =[placeDict objectForKey:@"countryFull"];

            NSString *latitude =[loctionDict objectForKey:@"lat"];
            NSString *longitude = [loctionDict objectForKey:@"long"];
            place.placeNmae=name;
            place.countryFullName=countryFull;
            place.stateFullName=stateFull;
            NSLog(@"%@ ",stateFull);

            place.latitude=[latitude doubleValue];
            place.longitude=[longitude doubleValue];


             [dataArray addObject:place];

        }


    }

    return dataArray;
}

5 个答案:

答案 0 :(得分:1)

您可以将名称NSString添加到NSSet,并在每个周期检查它是否包含它。

if内,您可以写下以下内容:

NSArray *responceArray = [returnDict objectForKey:@"response"];
NSSet *names = [[NSSet alloc] init];
for (NSDictionary *dict in responceArray) {
     NSDictionary *placeDict = (NSDictionary *)[dict objectForKey:@"place" ];
     NSString * name =[placeDict objectForKey:@"name"];
     if (![names containsObject:name]) {
          [names addObject:name];
          placeDC *place = [[placeDC alloc]init];
          NSDictionary *loctionDict =(NSDictionary *)[dict objectForKey:@"loc"];
          NSString * stateFull =[placeDict objectForKey:@"stateFull"];
          NSString * countryFull =[placeDict objectForKey:@"countryFull"];

          NSString *latitude =[loctionDict objectForKey:@"lat"];
          NSString *longitude = [loctionDict objectForKey:@"long"];
          place.placeNmae=name;
          place.countryFullName=countryFull;
          place.stateFullName=stateFull;
          NSLog(@"%@ ",stateFull);

          place.latitude=[latitude doubleValue];
          place.longitude=[longitude doubleValue];
          [dataArray addObject:place];
     }
}

希望这有帮助!

答案 1 :(得分:1)

首先检查服务器端是否有任何响应,检查响应是否使用NSLog()或断点。

如果响应正常,则进行以下检查您的代码

if (![dataArray containsObject:@"Some Name"])
{

    // add Object

}

答案 2 :(得分:1)

做一件事,在另一个数组中添加dict并在此数组中搜索数据是否已存在,

[tempAry addObject: dict]; 

并在插入之前

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", name];
    NSArray *filteredArray = [tempAry filteredArrayUsingPredicate:predicate];
    if ([filteredArray count] == 0)
    {
        [dataArray addObject:place];
    }
    else{
        //Already exist
    }

答案 3 :(得分:0)

为什么不创建一个单独的字典,作为你的类的ivar或属性,用于存储我们所需的值,比如说:

NSMutableDictionary *uniqueValueDict=[NSMutableDictionary new];

并继续存储您所需的值和密钥:

[uniqueValueDict setObject:stateFull forKey:uniqueValueDict];

你的工作将完成。

答案 4 :(得分:0)

这是我应用的最简单的解决方案,这应该让你从阵列中挑选出独特的元素。

 NSArray * claimedOfferArray = [[NSArray alloc]initWithObjects:@"A",@"B",@"A",@"C",@"B" nil];
  NSArray * distinctArray = [[NSArray alloc]init]; 
  distinctArray =[[NSSet setWithArray:claimedOfferArray] allObjects];

此代码也适用于NSMutableArray 让我知道它是否适合你.. :)。