2014-02-19 3 views
0

키가 포함 된 객체 배열 (사전)이 @"Category"입니다. 그 키로 시작하는 특정 키로 정렬해야합니다. 예를 들어, objects[@"Category"]: A, B ,C ,D ,E ,F ,G , H etc.의 값과 사용자가 "C로 정렬"을 선택하면 [@"Category"] 인 객체로 루트 배열을 재정렬해야합니다. C, D, E, F, G, H, A, B 또는 C , A, B, D, E, F, G, H.특정 값에서 시작하는 사전 배열 정렬

내 목표가 무엇인지 분명히 알기를 바랍니다. 나는 시도했다 :

// sortedPosts2 = [self.objects sortedArrayUsingComparator:^(PFObject *object1, PFObject *object2) { 
//   return [object1[@"Category"] compare:object2[@"Category"] options:NSOrderedAscending]; 
// }]; 


// NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:category ascending:YES]; 
// sortedPosts2 = [self.objects sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; 


    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop]; 
} 
+0

아무것도 선택된 정렬 항목을 다루는 것 같다 ... 주위 수익을 내림차순, 난 항상 상승/하강과 혼동 표지판이나 오름차순/이상 변경해야 할 수도 있습니다 ... – Wain

+0

sortDescriptorWithKey : category 여기서 category는 사용자가 선택한 문자열입니다. – snksnk

답변

1

내가 생각할 수있는 가장 쉬운 방법은 정렬 블록이다. 그런 다음 배열 비교 값을 수동으로 조정할 수 있습니다. 이것은 Category에있는 모든 크기 문자열에서 작동합니다. 당신은 당신의 코드에서

NSArray *array; 
NSString *userSelectedValue = @"C"; 
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSString *category1 = [[(NSDictionary*)obj1 objectForKey:@"Category"] lowercaseString]; 
    NSString *category2 = [[(NSDictionary*)obj2 objectForKey:@"Category"] lowercaseString]; 

    //Now check if either category's value is less than the user selected value 
    NSComparisonResult result1 = [category1 compare:[userSelectedValue lowercaseString]]; 
    NSComparisonResult result2 = [category2 compare:[userSelectedValue lowercaseString]]; 

    if(result1 == result2) 
    { 
     return [category1 compare:category2]; 
    } 
    else if(result1 > result2) 
    { 
     return NSOrderedDescending; 
    } 
    else 
     return NSOrderedAscending; 
}];