извлечение уникальных значений из массива пользовательских объектов - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть список массива пользовательских объектов. каждый объект содержит значение, которое мне нужно вывести, RequestNO, но это не уникальное значение, то есть, скажем, 5 объектов могут иметь одно и то же слово RequestNO.

что мне нужно сделать, это создать массив, который имеет только уникальные заявки. Мне нужно отобразить это в сборщике и не может быть повторяющихся претензий.

мой объект:

@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: ClauiceClaim.claimID]" всегда равно нулю до оператора if.

если у меня есть значение requestID, могу ли я просто проверить, существует ли это значение ключа в словаре, а если нет, добавить его?

Я бы хотел избежать перебора словаря ClaimCenterClaimNOList (создает цикл в цикле). но я знаю ключ, я не могу просто посмотреть, существует ли этот ключ в словаре?

РЕДАКТИРОВАТЬ: неверная логика

мои значения requestID являются уникальными, поэтому я проверял свой словарь, если в него уже был добавлен requestID. так как requestID является уникальным, он не нашел соответствия. Я переключил поиск вокруг и теперь работает. вот правильный код:

             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 голосов
/ 28 сентября 2011

Пара баллов, для objectForKey проверьте nil, чтобы определить отсутствие ключа.

Кроме того, вы можете просто отбросить массив заявок в NSSet, который кажется ближежелаемое поведение.Но я не уверен, что если вы хотите просто получить доступ к одной или всем претензиям для любого заданного номера претензии.

Я думаю, что мудрый дизайн будет работать, но обобщите ваш класс претензий, включив в него все претензииза любой номер претензии.Сохраните свой словарь, и ключ номера заявки будет иметь доступ ко всем заявленным претензиям, прикрепленным к уникальному номеру претензии.

...