从自定义对象数组中提取唯一值

时间:2011-09-28 15:29:25

标签: objective-c nsdictionary

我有一个自定义对象的数组列表。每个对象包含我需要提取的值,claimNO,但不是唯一值,意味着说5个对象可能具有相同的claimNO。

我需要做的是创建一个只有唯一claimNO的数组。我需要在选择器中显示它,并且不能有任何重复的声明。

我的对象:

@interface ClaimCenterClaim : NSObject 
{
    NSNumber *claimID;
    NSString *claimNO;
    NSNumber *coid;
    NSString *eventDates;
}

@property (nonatomic, retain) NSNumber *claimID;
@property (nonatomic, retain) NSString *claimNO;
@property (nonatomic, retain) NSNumber *coid;
@property (nonatomic, retain) NSString *eventDates;

@end
对我来说,这应该有效:

            NSMutableDictionary *ClaimCenterClaimNOList = [[NSMutableDictionary alloc] init];

            int count01 = [sortedClaimList count];
            for (int i = 0; i < count01; i++) 
            {
                claimCenterClaim = [sortedClaimList objectAtIndex:i];

                if ([ClaimCenterClaimNOList objectForKey:claimCenterClaim.claimID] != claimCenterClaim.claimNO)
                {
                    NSLog(@"entered the bloody loop");
                    [ClaimCenterClaimNOList setObject:claimCenterClaim.claimNO forKey:claimCenterClaim.claimID];
                }
                else
                    NSLog(@"did not add value");
            }

但是我的“[ClaimCenterClaimNOList objectForKey:claimCenterClaim.claimID]”的值在if语句之后始终为null。

如果我有一个claimID值,我不能只检查字典中的键值是否已经存在,如果没有,请添加它吗?

我想避免需要通过ClaimCenterClaimNOList字典进行迭代(在循环中创建一个循环)。但我知道密钥,我不能只看到该密钥是否已存在于字典中?

编辑:逻辑错误

我的claimID值是唯一的,所以如果claimID已经添加到字典中,我正在检查我的字典。由于claimID是唯一的,因此从未找到匹配项。我切换了搜索,现在正在工作。这是正确的代码:

             int count01 = [sortedClaimList count];
            for (int i = 0; i < count01; i++) 
            {                    
                claimCenterClaim = [sortedClaimList objectAtIndex:i];

                NSLog(@"lets see before: claimCenterClaim.claimiD: %@ the object: %@",claimCenterClaim.claimID, [ClaimCenterClaimNOList objectForKey:claimCenterClaim.claimID]);

                if ([ClaimCenterClaimNOList objectForKey:claimCenterClaim.claimNO] == nil)
                {
                    NSLog(@"not in the dictionary");
                    [ClaimCenterClaimNOList setObject:claimCenterClaim.claimID forKey:claimCenterClaim.claimNO];
                }
                else
                {
                    NSLog(@"it works, it is in the dictionary");
                }
            }

1 个答案:

答案 0 :(得分:0)

对于objectForKey的情侣点,检查nil以确定是否缺少密钥。

此外,您可以将声明数组放入似乎更接近所需行为的NSSet。但我不确定,如果您只想访问任何特定索赔号的一项或所有索赔。

我认为设计明智,您正在做的事情会起作用,但概括您的索赔类别以包括任何给定索赔号码的所有索赔。保留字典,索赔号码密钥将访问附加到唯一索赔号的所有特定索赔。