2011-12-17 12 views
0

私はplistから情報を取得しているアプリを持っています。 plistは、キー(author、cat、content)を持つDictionariesの配列です。 ここでは、カテゴリを表に表示したいと考えています。 したがって、すべての一意のカテゴリエントリがソートされた方法で必要です。配列内の二重項目を削除し、結果をソート

私はうまく実装されていますが、これが「正しい」解決策であれば興味があります。ソートする可能性があるとNSArray

  • このNSSet置くユニークな要素を取得するためにNSSet

    1. plistの配列を通過し、このNSMutableArrayを置く辞書
    2. のすべてのカテゴリ エントリを持つ新しいNSMutableArrayを作りますそれ。
    3. リターンソートNSArray

    で開始NSMutableArray私はこれがそうするの正し​​い方法であること、ではない感じ。 それを改善するための提案はありますか?

    ありがとうございます!

    //InhaltefromWEb is a NSMutableArray 
    -(NSArray*) getCategories { 
    NSMutableArray* categorieTemp = [[NSMutableArray alloc] init]; 
    
    unsigned count = [InhalteFromWeb count]; 
    while (count--) { 
        NSString *tempString; 
        tempString=[[InhalteFromWeb objectAtIndex:count] objectForKey:CATEGORY]; 
        NSLog(@"tempString %@", tempString); 
        [categorieTemp addObject:tempString]; 
    } 
    
    NSSet *uniqueElements = [NSSet setWithArray:categorieTemp]; 
    NSLog(@"categories from engine %@", categorieTemp); 
    NSArray* tempAr = [[[NSArray alloc] initWithArray:[uniqueElements allObjects]]sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
    
    return [NSMutableArray arrayWithArray:tempAr]; 
    
    } 
    
  • +1

    ええ、それはいいです。あなたのwhileループでカテゴリtempの代わりにNSMutableSetを使用するだけで、それに直接文字列を追加することができます。 – carbonbasednerd

    +0

    良いヒント:-)ありがとう。私はまだこれらの異なるタイプと可能性を失って、データを保存してから再変換することができます。 :-)ステップバイステップでもっと意味をなさないでしょう... – Ssernengreiferin

    +0

    まだデータストレージのソリューションとしてCore Dataを読んでおく必要があります。 – carbonbasednerd

    答えて

    0

    [categorieTemp containsObject:tempString]との既存の文字列をチェックし、[categorieTemp sortUsingComparator:...]

    例でそれを並べ替える:

    [categorieTemp sortUsingComparator:^NSComparisonResult(id obj1, id obj2) 
    { 
        return [(NSString *)obj1 caseInsensitiveCompare:(NSString *)obj2]; 
    }]; 
    
    +0

    こんにちは、私はcontainsObjectがどのように役立つべきか理解していません。一意のアイテム(すべてのカテゴリは1回のみ)のリストを持っていたいと思います。 – Ssernengreiferin

    +0

    'categorieTemp containsObject:tempString 'が既に追加されている場合は、' categorieTemp containsObject:tempString'で 'categorieTemp'配列に追加する前に' [categorieTemp containsObject:tempString] 'でチェックできます。または、配列をステップ実行して、追加する文字列に対してすべての文字列をチェックします。 –

    0

    私は日付の私の配列をソートするために、この操作を行います。

    [array sortedArrayUsingComparator: ^(id obj1, id obj2) { 
         NSDate *date1 = [obj1 objectForKey:@"datum"] == nil ? nilDate : [obj1 objectForKey:@"datum"]; 
         NSDate *date2 = [obj2 objectForKey:@"datum"] == nil ? nilDate : [obj2 objectForKey:@"datum"]; 
         return (NSComparisonResult)[date2 compare: date1]; 
        }]; 
    
    関連する問題