【问题标题】:Extracting Unique Objects from a Data Array从数据数组中提取唯一对象
【发布时间】:2012-12-22 08:07:43
【问题描述】:

仅当名称以前不存在于数据数组中时,我才想在数据数组中添加名称。当我尝试打印这些名称时,我确实得到了重复。有没有办法解决这个问题?

-(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;
}

【问题讨论】:

  • 为什么你之前接受了我的回答?

标签: iphone objective-c ios xcode ipad


【解决方案1】:

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

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

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

    // add Object

}

【讨论】:

【解决方案2】:

您可以将名称 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];
     }
}

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    做一件事,将你的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
        }
    

    【讨论】:

      【解决方案4】:

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

      NSMutableDictionary *uniqueValueDict=[NSMutableDictionary new];
      

      并继续将您所需的值和键存储为:

      [uniqueValueDict setObject:stateFull forKey:uniqueValueDict];
      

      你的工作会完成的。

      【讨论】:

      • 他 @Anoop Vaidya 我想删除重复的状态名称请检查链接
      • 你有一个 responceArray,其中包含一个具有 placeDict 的 dict,并且在这个 plceDict 中你想删除状态的重复?
      • 那么有什么大不了的......我已经给出了一个解决方案......实施它,最后用 uniqueVauleDict 替换 placeDict。就是这样。
      【解决方案5】:

      这是我应用的最简单的解决方案,这应该可以让您从数组中提取独特的元素。

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

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

      【讨论】:

      • 那么这段代码可以帮助你提取唯一的元素..在这种情况下..如果你为不同的数组放置一个 NSLog,你应该只得到 A、B、C 作为日志中的元素。那么到底有什么不适合你呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多