0

私はiOSとObjectiveCに不慣れで、実験して自分自身を教えるためにできることを考え出そうとしています。また、自分で学ぶのは難しいかもしれませんが、正しい方法で物事を行うことを学びたいと思います。

次のように見える可能性のある2つのNSArrayを取得したいと思います

Array1:-Object1:@ "Hello"-Object2:@ "This"-Object3:@ "Is a"-Object4:@ "Test"

Array2:-Object1:@ "Hello"-Object2:@ "Is a"

比較した両方の配列に表示されなかったオブジェクトを含む3番目の配列を作成すると、結果は次のようになります。

Array3:-Object1:@ "This"-Object2:@ "Test"

各配列を実行し、foreachを使用して各オブジェクトを実行し、各オブジェクトを2番目の配列のオブジェクトのリストと比較し、存在しない場合はarray1のオブジェクトをarray3に追加できると考えました。

私はメモリ管理に不慣れです(ARCがここにあることは知っていますが、今は古い学校になりたいと思っています。どこを見ても、学ぶことが重要なスキルだと言っています)。これをする。

助けてくれてありがとう、乾杯

4

3 に答える 3

4

あなたはおそらくセットで操作したいと思うでしょう。

Objective Cの対称差:

NSSet *set1 = [NSSet setWithObjects:@"Hello", @"This", @"Is a", @"Test", nil];
NSSet *set2 = [NSSet setWithObjects:@"Hello", @"Is a", nil];

NSMutableSet *notInSet1 = [NSMutableSet setWithSet:set2];
[notInSet1 minusSet:set1];
NSMutableSet *notInSet2 = [NSMutableSet setWithSet:set1];
[notInSet2 minusSet:set2];

NSMutableSet *symmetricDifference = [NSMutableSet setWithSet:notInSet1];
[symmetricDifference unionSet:notInSet2];

タスクにセットを使用する必要がある理由は、セットに一意のオブジェクトが含まれているためです(つまり、2つの@"42" NSStringオブジェクトを含めることはできません)。これは、交差、差分、結合などの操作が必要な場合に適しています。

于 2013-01-16T17:19:48.367 に答える
0

それを行うには多くの方法があります。フレームワーク配列メソッドを使用してそれを実行したい場合、これは良い方法かもしれません:

NSArray *Array1 = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
NSArray *Array2 = [NSArray arrayWithObjects:@"Two", @"Four", @"One", nil];
NSMutableArray *Array3 = [NSMutableArray arrayWithArray:Array1];
[intermediate removeObjectsInArray:Array2];

これらの配列はarraywithObjectsおよびarrayWithArrayから自動解放されて返されるため、この配列を解放することを気にする必要はありません。

于 2013-01-16T17:03:00.437 に答える
0

サンプルコードのようにオブジェクトを使用する場合はNSString、最初の配列を繰り返し、それらの文字列をキーとしてNSMutableDictionary(例[dict setValue:[NSNumber numberWithBool:YES] forKey:str_object_here];)に追加します。

3番目の配列を作成します(最終出力、[[NSArray alloc] initWithCapacity:min_count]min_countが小さい配列のサイズである場合に使用します)

次に、2番目の配列を繰り返し、各項目について、それがディクショナリにキーとして存在するかどうかを確認します。存在しない場合は、3番目の(最終出力)配列に追加します。

辞書はキールックアップ用に最適化されているため(内部でハッシュを適切に使用して、間違っていない場合はO(1)である必要があります)、O(N ^ 2)からO(N)に移動します。

于 2013-01-16T18:03:55.173 に答える