2015-08-23 3 views
-2

Итак, у меня есть 2 массива, один из которых у меня из моего локального db sqlite, а другой - с сервера.Сравнение значений NSArray

Когда я пытаюсь использовать isEqualToArray: я получу NO, даже если они похожи. Эта статья NSHipster http://nshipster.com/equality/ сказала мне, что это потому, что они сравнивают идентичность в памяти ..? Так что мне нужно каким-то образом сравнить значения?

Вся помощь будет оценена, я долго смотрел на нее слепо.

Так у меня есть 2 массивы:

NSArray *arr1 = [[NSArray alloc] initWithObjects:@"1",@"Hello",@"member",@"Janus", nil]; 
NSArray *arr2 = [[NSArray alloc] initWithObjects:@"1",@"Hello",@"member",@"Janus", nil]; 

Когда я распечатать их, они выглядят точно так же, когда я бегу NSSet на них, как Пабло предположить, я не получаю спичкой либо при запуске isEqualToArray на массивах напрямую. Они в порядке, и они всегда одного и того же числа, они идентичны, но код не распознает его.

+1

Не вдаваясь в кодирование, подумайте о том, как вы хотите определить «равный». Являются ли они равными, если они содержат равные объекты? Означает ли порядок? В зависимости от типа объектов вы можете принять одно и то же решение о равенстве объектов. –

+1

Два массива равны, только если они содержат равные объекты в одном порядке. Это правда в вашем случае? Какие объекты находятся в массивах? – rmaddy

+0

Да, извините, я не стал вдаваться в подробности. Я обновил вопрос. – 4FunAndProfit

ответ

0

Извините, я отредактировал свой ответ, когда понял, что может потерпеть неудачу. Здесь у вас есть лучшее решение:

NSSet *set1 = [NSSet setWithArray:arr1]; 
NSSet *set2 = [NSSet setWithArray:arr2]; 

if ([set1 isEqualToSet:set2]) { 
    // equal 
    NSLog(@"They contain same objects"); 

    if(arr1.count == arr2.count) { 
     NSLog(@"They are exactly the same (not checking order)"); 
    } 
} 

Отредактировано в соответствии с комментариями.

+1

Это делает их равными: 'NSArray * arr1 = @ [@" A ", @" B ", @" A "];' и 'NSArray * arr2 = @ [@" A ", @" B ", @" A ", @" B "];'. Может быть, а может и нет ... зависит от того, что нужно. –

+0

Вы правы @PhillipMills Я отредактировал свой ответ –

+0

Я думаю, вам нужно 'arr1.count == arr2.count', а не проверять размеры набора. –

Смежные вопросы