2010-08-17 12 views
2

JSON API를 사용하는 응용 프로그램에서 작업 중이며 Objective C 프레임 워크 용 JSON을 사용하여 NSDictionary에 데이터를 가져옵니다. 이 같은 사전의 루스 :NSDictionary 필터링 및 정렬

하나의 동일한 "ISSUE_ID"모든 개체 그룹화 UITabeView를 표시하는 모든 "ISSUE_ID는"2 데르 6 인 객체 또는 이제까지 무엇을 얻을 수있는 좋은 방법이 무엇
({ 
    admitted = "<null>"; 
    agreed = "<null>"; 
    "area_id" = 1; 
    "area_name" = "Digitales, Urheber-/Patentrecht, Datenschutz"; 
    created = "2010-08-17 12:41:03"; 
    "current_draft_content" = Bla Bla Bla"; 
    "current_draft_created" = "2010-08-17 12:42:44"; 
    "current_draft_formatting_engine" = compat; 
    "discussion_url" = "http://piratenpad.de/OpenSourceZwang"; 
    id = 502; 
    "informed_supporter_count" = 11; 
    "issue_accepted" = ""; 
    "issue_admission_time" = "8 days"; 
    "issue_closed" = ""; 
    "issue_created" = "2010-08-17 12:41:03"; 
    "issue_discussion_time" = "15 days"; 
    "issue_fully_frozen" = ""; 
    "issue_half_frozen" = ""; 
    "issue_id" = 242; 
    "issue_population" = 372; 
    "issue_ranks_available" = 0; 
    "issue_state" = new; 
    "issue_verification_time" = "8 days"; 
    "issue_vote_later" = 0; 
    "issue_vote_now" = 0; 
    "issue_voter_count" = "<null>"; 
    "issue_voting_time" = "8 days"; 
    name = "Alte & unsupportete Software, muss Open Source werden"; 
    "negative_votes" = "<null>"; 
    "policy_initiative_quorum_den" = 100; 
    "policy_initiative_quorum_num" = 10; 
    "policy_issue_quorum_den" = 100; 
    "policy_issue_quorum_num" = 10; 
    "policy_majority_den" = 2; 
    "policy_majority_num" = 1; 
    "policy_majority_strict" = 1; 
    "positive_votes" = "<null>"; 
    rank = "<null>"; 
    revoked = "<null>"; 
    "satisfied_informed_supporter_count" = 7; 
    "satisfied_supporter_count" = 7; 
    "suggested_initiative_id" = "<null>"; 
    "supporter_count" = 11; 
}, 
    { 
    admitted = "<null>"; 
    agreed = "<null>"; 
    "area_id" = 1; 
    "area_name" = "Digitales, Urheber-/Patentrecht, Datenschutz"; 
    created = "2010-08-17 14:09:14"; 
    "current_draft_content" = "Bla Bla Bla"; 
    "current_draft_created" = "2010-08-17 14:09:31"; 
    "current_draft_formatting_engine" = compat; 
    "discussion_url" = ""; 
    id = 508; 
    "informed_supporter_count" = 0; 
    "issue_accepted" = "2010-08-14 01:51:45"; 
    "issue_admission_time" = "15 days"; 
    "issue_closed" = ""; 
    "issue_created" = "2010-08-14 01:34:26"; 
    "issue_discussion_time" = "30 days"; 
    "issue_fully_frozen" = ""; 
    "issue_half_frozen" = ""; 
    "issue_id" = 30; 
    "issue_population" = 603; 
    "issue_ranks_available" = 0; 
    "issue_state" = accepted; 
    "issue_verification_time" = "15 days"; 
    "issue_vote_later" = 9; 
    "issue_vote_now" = 0; 
    "issue_voter_count" = "<null>"; 
    "issue_voting_time" = "15 days"; 
    name = "Grundrecht: Alternative Formulierung"; 
    "negative_votes" = "<null>"; 
    "policy_initiative_quorum_den" = 100; 
    "policy_initiative_quorum_num" = 10; 
    "policy_issue_quorum_den" = 100; 
    "policy_issue_quorum_num" = 10; 
    "policy_majority_den" = 3; 
    "policy_majority_num" = 2; 
    "policy_majority_strict" = 0; 
    "positive_votes" = "<null>"; 
    rank = "<null>"; 
    revoked =   { 
    }; 
    "satisfied_informed_supporter_count" = 0; 
    "satisfied_supporter_count" = 0; 
    "suggested_initiative_id" = "<null>"; 
    "supporter_count" = 0; 
} 
) 

그룹?

답변

2

당신은 정렬 NSSortDescriptor을 사용할 수 있습니다 그리고/또는 자 NSPredicate

NSSortDescriptor *dateSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"issue_id" ascending:YES selector:@selector(compare:)] autorelease]; 
    [youDictionaryArray sortUsingDescriptors:[NSArray arrayWithObjects:dateSortDescriptor, nil]]; 

는 일부 ID를 얻을 수 :

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(issue_id == %i)", 2]; 
    NSArray *newArray = [youDictionaryArray filteredArrayUsingPredicate:predicate]; 
0

여러 가지 방법이 있습니다. NSPredicate을 사용하고 NSArray 메서드 -filteredArrayUsingPredicate:을 사용할 수 있습니다. 또는 iOS 4에서는 필터링 블록을 사용합니다. -indexesOfObjectsPassingTest: 다음 -objectsAtIndexes:을 사용하여 개체를 가져옵니다.

그렇지 않으면 최고의 방금 새로운 하나에 배열을 반복하고 원하는 항목을 필터링입니다 :

// Given a NSArray *items 
NSMutableArray *filteredItems = [NSMutableArray array]; 
for (NSDictionary *item in items) { 
    if (/* your condition */) { 
    [filteredItems addObject: item]; 
    } 
}