1

プロパティを持つNSArray包含オブジェクトがありsizeます。

NSArrayに同じ値を持つ 2 つのオブジェクトがあるかどうかを確認するにはどうすればよいsizeですか?

次のようなことはできますか:

int i = 0;
for (id item1 in myArray) {
    NSDecimalNumber *size1 = [item1 size];

    for (id item2 in myArray) {
        NSDecimalNumber *size2 = [item2 size];

        if ([size1 isEqual:size2]) {
            i ++;
        }
    }
}

if (i > [myArray count]) {
    NSLog(@"Duplicate Sizes Exist");
}

それとももっと簡単な方法がありますか?

4

4 に答える 4

3

このコードを試してください:

NSSet *myset = [NSSet setWithArray:[myarray valueForKey:@"size"]];
int duplicatesCount = [myarray count] - [myset count];

sizeここにオブジェクトのプロパティがあります。

于 2013-05-09T11:59:50.560 に答える
1

NSCountedSetを使用します。次に、すべてのオブジェクトをカウントされたセットに追加し、countForObject: メソッドを使用して、各オブジェクトが配列に出現する頻度を調べます。

このリンクも確認できますhow-to-find-duplicate-values-in-arrays

それがあなたを助けることを願っています

于 2013-05-09T11:18:31.010 に答える
0
NSArray *cleanedArray = [[NSSet setWithArray:yourArraywithDuplicatesObjects ] allObjects];

Setを使用すると、すべての重複オブジェクトが削除countForObject:されます。

于 2013-05-09T11:20:18.460 に答える
0

おそらく最も簡単なのは、サイズ フィールドに基づいて配列を並べ替えてから、並べ替えられたリストをステップ実行して隣接する重複を探すことです。

サイズをキーとしてエクスポートし、セットを使用するオブジェクトに各オブジェクトを「ラップ」することもできます。しかし、それは多くの余分な割り当てです。

ただし、複製が存在するかどうかだけを知りたい場合で、それらがどれであるかは知りたくない場合は、オブジェクトのサイズごとに NSNumber を作成し、その NSNumber をセットに挿入します。最終的なサイズは、重複の数を示します。

于 2013-05-09T11:24:02.747 に答える