2014-01-13 2 views
0

나는 NSArray이고 두 키의 데이터를 가져와 NSMutableDictionary에 넣어야합니다. 하나의 키에는 string 값이 있고 다른 키에는 NSNumber 값이 있습니다. 개체를 동일하지 않기 때문에 NSCountedSetarrays을 구분하는 데 사용하지 않고 키를 추가하지 않고 만들려고하면 기본적으로 개체가 동일하지 않으므로 objectId이 동일한 지 확인해야합니다. 다른 키 다르다. NSCountedSet에서 NSArray 원래 순서 유지

for (PFObject *objeto in objects) { 
     PFObject *exercicio = objeto[@"exercicio"]; 
     NSString *string = exercicio.objectId; 
     NSNumber *nota = objeto[@"nota"]; 
     [exercicios addObject:string]; 
     [notas addObject:nota]; 

그래서 내가 두 NSMutableArrays를 작성하고 내가 필요로하는 값을 저장 :

다음은 초기 코드입니다. 배열 log 다음에이 배열이 있으면 완벽하게 정렬됩니다. 즉, NSString이 의 index이고 다른 배열이 array 인 것입니다. 여태까지는 그런대로 잘됐다.

이제 문자열을 사용하여 NSCountedSet을 만들면 순서가 변경됩니다.

NSCountedSet *countedExercicios = [[NSCountedSet alloc] initWithArray:exercicios];.

내 목표는 sum입니다. 특정 개체와 관련된 NSNumbers이므로 주문이 변경되면 두 개의 연결이 끊어집니다. arrays.

이 문제를 해결하기 위해 내가 무엇을 할 수 있는지, 또는 내가 원하는 결과를 얻기 위해 다른 접근법이 있더라도 확실하지 않습니다.

+1

NSSet 및 이에 따라 계산 된 세트에는 해당 요소와 관련된 주문이 없습니다. NSOrderedSet은하지만 카운트되지 않으며 NSSet의 서브 클래스가 아닙니다. – Monolo

답변

1

NSDictionary를 만들어 배열에 추가 할 수 있습니다. 당신은 단지 하나 개의 배열을하고 당신이 연결을 잃지 않을 것이다, 당신은 값으로 키와의 NSNumber로 OBJECTID 사용할 수 있습니다

for (PFObject *objeto in objects) { 
     PFObject *exercicio = objeto[@"exercicio"]; 
     NSString *string = exercicio.objectId; 
     NSNumber *nota = objeto[@"nota"]; 
     NSDictionary *dict = @{string: nota}; 
     [newArray addObject: dict]; 
} 

당신이 NSPredictate을 사용할 수 있습니다 (OBJECTID를) 모든 키를 얻을 필요합니다.

희망 도움말

+0

나는 그것을 얻었는지 잘 모르겠습니다. 그리고 어떻게 중복을 계산하고 이것들의 값을 합산합니까? 감사. – Jorge

+0

중복을 얻으려면 배열을 열거하고 사전을 비교해야합니다. 중복을 발견하면 원하는 작업을 수행해야합니다. 만약 당신이 sum을 얻고 싶다면, objectId가 1 인 object를 말하면, NSNumber를 호출 할 수 있습니다. * sum = [newArray valueForKeyPath : @ "@ sum.1"]; – Greg

+0

완벽한! 큰 도움. 감사. – Jorge