2010-05-30 39 views
8

Làm thế nào tôi có thể mất hai NSArrays, so sánh chúng, sau đó trả lại số khác biệt, tốt nhất là số lượng các đối tượng khác nhau, ví dụ:So sánh hai NSArrays và trả lại số chênh lệch

Mảng 1: một hai ba

mảng 2: hai bốn một

tôi muốn rằng để trở về "1"

+0

Tại sao có một khác biệt đó và không phải là hai? –

+0

vì có một yếu tố khác nhau. 1 có "ba" và 2 có "bốn" –

Trả lời

23

Bạn có thể làm điều này bằng cách sử dụng một trung gian NSMutableArray:

NSArray *array1 = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil]; 
NSArray *array2 = [NSArray arrayWithObjects:@"Two", @"Four", @"One", nil]; 
NSMutableArray *intermediate = [NSMutableArray arrayWithArray:array1]; 
[intermediate removeObjectsInArray:array2]; 
NSUInteger difference = [intermediate count]; 

Với cách đó, chỉ yếu tố chung sẽ bị xóa.

+0

Hoạt động hoàn hảo! Cảm ơn nhiều! –

+1

Nếu bạn có số lượng mục tương đối lớn trong mảng này, * có thể * chậm. Có lẽ. Đo nó. Nếu có, hãy cân nhắc sử dụng 'NSSet' để thay thế. – bbum

2

Tôi thấy rằng câu trả lời ở trên không tính đến các mảng có kích thước khác nhau. Nếu bạn làm điều đó như trên, bạn nên kiểm tra xem array.count là nhỏ hơn và

[largerArray removeObjectsInArray:shorterArray]; 

HOẶC

tôi làm cho họ cả NSSets và sau đó so sánh.

[set1 isEqualToSet:set2]; 

Kích thước và thứ tự đó đều được xử lý đúng cách! (Tôi không cần biết số khác biệt)

Các vấn đề liên quan