NSMutableSet Set Минус Set не работает

Я, должно быть, упускаю что-то фундаментальное - надеюсь, кто-то может указать мне на это.

У меня есть два NSSets. Набор A содержит 40 значений NSNumber, а набор B содержит 20 значений NSNumber. Набор A содержит все 20 значений набора B плюс 20 других значений, которые не являются общими для наборов.

Я хотел бы сделать следующее: NSSet * newSet = Set A - Set B, где новый набор содержит только 20 значений из набора A, которых нет в наборе B. Хотя я использую 'minusSet', мой новый набор всегда содержит все 40 оригинальных значений. Я зарегистрировал содержимое каждого набора A и B, чтобы убедиться, что они содержат содержимое, которое я описал выше.

Вот мой код:

1) Создать набор A (содержит 40 номеров NSN)

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

2) Создать набор B (содержит 20 номеров NSN, которые также входят в набор A)

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

3) Попытка вычесть множество B из множества A:

[fetchedThreadIds minusSet:savedThreads];

4) Добавьте все оставшиеся объекты в новый массив:

threadIdsForMessageFetch = [fetchedThreadIds allObjects];

Тем не менее, threadIdsForMessageFetch содержит 40 объектов, а не 20. Когда я печатаю каждый набор, я получаю:

Комплект А

{(
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
)}

Комплект Б

{(
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

1 ответ

Решение

Я попробовал это, и это сработало, поэтому я предполагаю, что есть другой код, который отсутствует или 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)}
сохраненные темы: {(
3,
2)}
fetchedThreadIds: {(
1,
4)}
threadIdsForMessageFetch: (
1,
4)

Размещено в качестве ответа в основном для форматирования.

Другие вопросы по тегам