1

私はUITableView友人の名前を表示する a をインデックス化しようとしているのでNSArray、AZ からのすべての友人の名前を持っています。今のところ行ったことは、A = 20、B = 15 のように各文字の友人の数を計算することです。などで、これらのカウントを に入れますNSArray

私が今しなければならないことは、すべての名前が属するすべての名前 (例 A 文字) を配列に入れ、この配列を次のNSMutableDictionaryように格納することです:

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

「A」のような文字の残りの部分も。

私は各文字の名前のサイズを知っているので(サイズself.charcherSizeは次に、「コンテンツ」に追加します。NSMutableArrayNSMutableDictionaryNSMutableArray

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",
    );
},
4

2 に答える 2

2

characterSize と counts で何をしようとしているのかよくわかりません。これを行う簡単な方法は、変更可能な配列ではなく、変更可能な辞書を作成することだと思います。配列にはオブジェクトが 1 つしか含まれていないため、辞書です。したがって、これを行う方法は次のとおりです( 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);
于 2012-08-27T16:18:04.623 に答える
0

これを行うためにかなり複雑な方法を選択したようです。NSPredicateクラス (例:BEGINSWITH述語) を確認し、メソッドを使用して[NSArray filteredArrayUsingPredicate]各文字の名前を含む配列を生成します。

于 2012-08-27T16:15:55.110 に答える