我想仅在数据数组中以前不存在名称时才在数据数组中添加名称。当我试图打印这些名字时,我会重复这些。有办法解决这个问题吗?
-(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;
}
答案 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
让我知道它是否适合你.. :)。