2011-10-18 7 views
1

私は NSData *object1、もう1つはNSData *object2です。どのようにしてこれらのオブジェクトをどのようなパーセンテージで比較することができますか?たとえば、Object1はObject2に似ています - 99%。ありがとう。NSDataとパーセンテージのNSDataとの比較

答えて

4

両方のケースでバイトを取得し、それらの多くが等しいかチェックを反復。

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件のデータが他方よりも長い場合、あなたは余分な気にしない前提としています。

+0

ありがとう、それは素晴らしいです! – LightNight

1

本当にロジックに依存します。たとえば、画像を比較しようとすると(そのデータがNSDataとして保存されている)、write image comparison algorithmsが必要です。他の種類のデータである場合は、そのセマンティクスを最初に定義する必要があります。他のすべてが失敗した場合は、@ JeremyPの回答で十分であると思います。