NSData сравнить с NSData в процентах - PullRequest
1 голос
/ 18 октября 2011

У меня NSData *object1 и еще NSData *object2.Как я могу сравнить эти объекты, на сколько процентов они похожи?Например: Object1 похож на Object2 в - 99%.Спасибо.

Ответы [ 3 ]

4 голосов
/ 18 октября 2011

Получите байты в обоих случаях и проведите итерацию, проверяя, сколько из них равно.

uint8_t* bytes1 = (uint8_t*)[object1 bytes];
uint8_t* bytes2 = (uint8_t*)[object2 bytes];

NSUInteger sameCount = 0;
for (NSUInteger i = 0 ; i < MIN([object1 length], [object2 length]) ; ++i)
{
    if (bytes1[i] == bytes2[i])
    {
        sameCount++;
    }
}

double fractionSame = (double) sameCount / (double) MIN([object1 length], [object2 length]);

В приведенном выше предположении предполагается, что если одни данные длиннее других, их не волнует.

1 голос
/ 18 октября 2011

Это действительно зависит от логики. Если, например, вы пытаетесь сравнить изображения (а их данные хранятся в виде NSData), то вам нужно написать алгоритмы сравнения изображений . Если это какой-то другой тип данных, вам нужно сначала определить эту семантику. Если все остальное терпит неудачу, я думаю, что @JeremyP ответ должен быть достаточным.

0 голосов
/ 18 октября 2011

Для NSData такого нет.Вам нужно написать свой собственный элемент NSSortDescriptor, оптимизированный для того, как вы хотите сравнить содержимое одного NSData с другим.

...