2012-08-27 2 views
1

나는 친구 이름을 볼 수있는 UITableView을 색인하려고합니다. 그래서 나는 지금까지 한 모든 친구 이름이 NSArray 인 모든 친구 이름과 함께 각 문자에 대해 친구 수를 계산합니다 : A = 20, B = 15 등등이 카운트를 NSArray에 넣습니다.NSMutableArray는 마지막 루프 반복의 값만 유지합니까?

내가 이렇게 될 배열 (예 편지)마다 이름이 속한 넣어 시도하고 다음 NSMutableDictionary이 배열에 저장되어 지금해야 할 일은 :

A =   (
     Ali, 
     Alaa, 
     Asdsd, 
     Awer, 
     asdft 
    ); 

과의 나머지 부분을 'A'와 같은 편지.

각 글자의 이름 크기를 알고 있기 때문에 (self.charcherSize의 크기) 여기에 각 글자는 특정 글자에 속하며이를 NSMutableArray "이름"에 추가하고 해당 글자 그룹에서 작성한 코드를 추가합니다 다음 NSMutableDictionary "행"과에 그룹은 NSMutableArray "내용"에 추가 :

NSMutableArray *content = [NSMutableArray array]; 
NSMutableDictionary *row = [NSMutableDictionary dictionary]; 

int startPoint = 0; 
for(int i = 0; i < [self.charcherSize count]; i++) 
{ 
    NSMutableArray *names = [NSMutableArray array]; 
    NSInteger max = [[self.charcherSize objectAtIndex:i] integerValue] + startPoint; 

    for (int j = startPoint; j < max; j++) { 
     NSDictionary *dic = [self.friendsInfo objectAtIndex:j]; 

     [names addObject:[dic objectForKey:@"name"]]; 
    } 
    [row setValue:names forKey:charcher]; 
    [content addObject:row]; 
    startPoint = max; 
} 

하지만 문제는 NSMutableArray "내용이"단지 마지막 문자의 값을 보유하고있는 모든 사전의 값으로이 값을 복사하는 것이있다 이렇게 :

(
    { 
    "A" =   (
     "Zzz", 
     "Zzz1", 
     "Zzz2", 
    ); 
}, 
    { 
    "B" =   (
     "Zzz", 
     "Zzz1", 
     "Zzz2", 
    ); 
}, 
    { 
    "C" =   (
     "Zzz", 
     "Zzz1", 
     "Zzz2", 
    ); 
}, 

답변

0

당신은 이것을하기 위해 상당히 복잡한 방법을 택한 것 같습니다. NSPredicate 클래스 (예 : BEGINSWITH 술어)를 살펴본 다음 [NSArray filteredArrayUsingPredicate] 메서드를 사용하여 각 문자의 이름이있는 배열을 생성합니다.

2

characterSize 및 counts로 무엇을 하려는지 확실하지 않습니다. 배열을 변경할 수있는 배열이 아닌 가변적 인 사전을 만드는 것이 더 쉬운 방법이라고 생각합니다. , 사전. 그래서 여기에 어떻게 할 것인가? (friendsInfo가 이름의 배열이라고 가정) :

NSMutableDictionary *indexed = [NSMutableDictionary dictionary]; 
for (NSString *aName in friendsInfo){ 
    if (![[indexed allKeys] containsObject:[aName substringToIndex:1]]) { 
     [indexed setObject:[NSMutableArray arrayWithObject:aName] forKey:[aName substringToIndex:1]]; 
    }else{ 
     [[indexed valueForKey:[aName substringToIndex:1]] addObject:aName]; 

    } 
} 
    NSLog(@"%@",indexed); 
관련 문제