2

私は根本的な何かを見逃しているに違いありません.誰かが私にそれを指摘してくれることを願っています.

2 つの NSSet があります。セット A には 40 個の NSNumber 値が含まれ、セット B には 20 個の NSNumber 値が含まれます。セット A には、セット B の 20 個の値すべてと、セットによって共有されていない他の 20 個の値が含まれています。

私がやりたいことは次のとおりです: NSSet *newSet = Set A - Set B, ここで、新しいセットには、セット B に含まれていないセット A からの 20 個の値のみが含まれています。「minusSet」を使用していますが、新しいセットには常に元の値の 40 個すべて。上記の内容が含まれていることを確認するために、各セット A と B の内容をログに記録しました。

これが私のコードです:

1) セット A を作成する (40 個の NSNumber を含む)

NSMutableSet *fetchedThreadIds = [NSMutableSet setWithArray:[threadedJsonMessages valueForKey:@"tid"]];

2) セット B を作成する (セット A にもある 20 個の NSNumber を含む)

NSSet *savedThreads = threadIdsForSavedThreads([fetchedThreadIds allObjects]);

3) セット A からセット B を減算しようとします。

[fetchedThreadIds minusSet:savedThreads];

4) 残りのすべてのオブジェクトを新しい配列に追加します。

threadIdsForMessageFetch = [fetchedThreadIds allObjects];

ただし、threadIdsForMessageFetch には 20 個ではなく 40 個のオブジェクトが含まれています。各セットを印刷すると、次のようになります。

セットA

{(
2540000000136987400,
2540000000141777055,
2540000000144609986,
2540000000125243232,
2540000000144610000,
2320000003021796109,
2540000000144375484,
2540000000136185765,
2540000000135311778,
2540000000135311816,
2540000000124128112,
2540000000125012438,
2480000001401011569,
2540000000144610015,
2540000000135311744,
2540000000139755359,
2540000000135311848,
2540000000143846308,
2540000000145732667,
2540000000143985955,
2540000000136185740,
2540000000135756434,
2540000000134373148,
2540000000140816249,
2540000000130860748,
2540000000127140093,
2540000000143526120,
2540000000102176392,
2540000000144609962,
2540000000128826163,
2540000000136185694,
2540000000133208691,
2540000000144555891,
2540000000138091838,
2540000000130179358,
2540000000126098342,
2540000000145162237,
2540000000131688927,
2540000000136185715,
2540000000143526101
)}

セットB

{(
2540000000136987400,
2540000000138091838,
2540000000143985955,
2540000000144555891,
2540000000140816249,
2540000000145732667,
2540000000144609986,
2540000000144610000,
2540000000144609962,
2540000000144610015,
2540000000141777055,
2540000000143526101,
2540000000143526120,
2480000001401011569,
2540000000136185694,
2540000000145162237,
2540000000143846308,
2320000003021796109,
2540000000144375484,
2540000000139755359
)}

新しい配列:

<__NSArrayI 0xc4b8e40>(
2540000000136987400,
2540000000141777055,
2540000000144609986,
2540000000125243232,
2540000000144610000,
2320000003021796109,
2540000000144375484,
2540000000136185765,
2540000000135311778,
2540000000135311816,
2540000000124128112,
2540000000125012438,
2480000001401011569,
2540000000144610015,
2540000000135311744,
2540000000139755359,
2540000000135311848,
2540000000143846308,
2540000000145732667,
2540000000143985955,
2540000000136185740,
2540000000135756434,
2540000000134373148,
2540000000140816249,
2540000000130860748,
2540000000127140093,
2540000000143526120,
2540000000102176392,
2540000000144609962,
2540000000128826163,
2540000000136185694,
2540000000133208691,
2540000000144555891,
2540000000138091838,
2540000000130179358,
2540000000126098342,
2540000000145162237,
2540000000131688927,
2540000000136185715,
2540000000143526101
)

マイナスセットコール前の A と B のカウントは次のとおりです。

2014-05-14 22:37:00.900 App[35877:60b] fetchedThreadIdsCount = 40
2014-05-14 22:37:00.900 App[35877:60b] savedThreadsCount = 20
4

1 に答える 1

5

私はこれを試してみましたが、うまくいったので、欠落している、またはNSNumbers実際には同じではない他のコードがあると推測しています。印刷された表現は同じです。

NSMutableSet *fetchedThreadIds = [NSMutableSet setWithObjects:@1, @2, @3, @4, nil];
NSSet *savedThreads = [NSSet setWithObjects:@2, @3, nil];
NSLog(@"fetchedThreadIds: %@", fetchedThreadIds);
NSLog(@"savedThreads: %@", savedThreads);

[fetchedThreadIds minusSet:savedThreads];
NSLog(@"fetchedThreadIds: %@", fetchedThreadIds);
NSArray *threadIdsForMessageFetch = [fetchedThreadIds allObjects];
NSLog(@"threadIdsForMessageFetch: %@", threadIdsForMessageFetch);

NSLog 出力:

fetchedThreadIds: {(
3,
2,
1,
4 )}
savedThreads: {(
3,
2 )}
fetchedThreadIds: {(
1,
4 )}
threadIdsForMessageFetch: (
1,
4 )

主に書式設定の回答として投稿されました。

于 2014-05-15T02:38:02.080 に答える