2011-06-23 6 views
1

私は、XMLやJSONを解析し、表にリストしなければならないという要件に出くわしました。ディクショナリまたは複数の配列の配列が最適ですか?

私はこれを達成する上で問題はないが、私はあまりメモリリソースを使用するようにコードを最適化したいと思います。

質問は、それはそれは、複数のアレイを持っていることが最善であるか、それは内容が辞書です単一の配列を持っている方が良いです。

、そう

ウェイ1

NSArray* names = [NSArray arrayWithObjects: 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"rama krishna",@"firstname", 
        @"chunduri",@"surname", 
        nil], 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"rama krishna",@"firstname", 
        @"gutta",@"surname", 
        nil], 
        [NSDictionary dictionaryWithObjectsAndKeys: 
        @"selvakumar",@"firstname", 
        @"k",@"surname", 
        nil], 
        nil]; 

ウェイ2

NSArray *firstnames=[NSArray arrayWithObjects:@"Rama Krishna",@"Rama Krishna",@"selvakumar",nil]; 
NSArray *surnames=[NSArray arrayWithObjects:@"chunduri",@"gutta",@"k",nil]; 

3名は2通りの方法で保存されている次の例を見てください。どちらこれらの2つの方法のうちの1つは、最適化されたメモリ消費のために好ましい。

答えて

10

あなただけのオブジェクト指向プログラミングを使用するための優れた場所に遭遇しました。

「firstname」から「rama krishna」と「gutta」にマップする辞書は、実際に姓と名字のインスタンス変数NSString*を持つクラスにグループ化する必要があります。

例えば:

@interface Person : NSObject { 
    NSString *firstname; 
    NSString *surname; 
} 

@end 

次に、あなただけのPersonオブジェクトの配列を持つことになります。ほとんどの場合、使いやすく、「正しい」方法で操作できます。あなたのコードに触れる人は誰でも感謝します。

+0

ソリューションがいいです、私はファーストネームを述べ、姓のために:配列はindvisual disctionaryオブジェクトを取得するためにobjects.Andとしてあなたは辞書を追加することができます。このように

// In a loop NSMutableDictionary *dictError=[NSMutableDictionary dictionaryWithObjectsAndKeys:maxCount,kID,kUsers,kEntity,[Utils convertDateInString:[NSDate date]],kDate,kTrue,kStatus,kEnter,kDescription, nil]; [arrError addObject:dictError]; 

:私は私の最新のアプリケーションでこれを使用しました例。 –

+0

偉大な答え。 iOSでプログラミングすると、NSArraysとNSDictionariesを使いすぎて、適切なオブジェクト指向プログラミングを忘れるようなCocoa Touchのフレームワークを使用することに常に集中してしまいます。 – darksky

+0

現代的なObjective-Cの場合、コード例に示されているように、ivarsではなくプロパティを使用したいと思うでしょう! – fatuhoku

0

の配列に、より良い選択が追加されます。すなわち1つのアレイと複数の辞書とを含む。

NSMutableDictionary *nameDictionary = [arrError objectAtIndex:1]; 
NSString *strEntityName = [nameDictionary objectForKey:@"KeyName"]; 
+0

私は本当に辞書は物事を行うための最良の方法だとは思わない。なぜデータを格納するオブジェクトを作成しないのですか? –

+0

suggestion.so方法2のおかげでメモリ消費量が少なくなります。 –

+0

@Chris:非常によく言った。私が示唆しているのは、ラマが求めている副詞の代わりに、単一の配列と複数の辞書のために行くことです。 – Nitish

関連する問題