2013-09-05 4 views
0

Привет Я интересно, как сравнить содержимое setObjects хранящимися с ключами в качестве NSDictionary: Вот мой код, я работаю с:NSDictionary и сравнивающие SetObjects

[INNumbers setObject:@"0,1,2,3,4,5,6,7" forKey:@"0"]; 
[INNumbers setObject:@"4,5,6,7,8,9,10,11" forKey:@"1"]; 

Я удивляюсь, как я бы сравните 2 клавиши и найдите, есть ли похожие числа, например, если в обоих случаях встречается 7?

//this will get the numbers in the keys for me 
    id number1 = [INNumbers objectForKey:@"0"]; 
    id number2 = [INNumbers objectForKey:@"1"]; 

, но я не уверен, как сравнить то, что число1 и число2 извлекают.

+0

Вы сравниваете две строки здесь, чтобы узнать, какие числа повторяются, вам будет трудно, если вы хотите идти этим путем. Не лучше ли использовать массивы с числами? Это нужно сделать для какого-то странного требования? – Emilio

+0

Я просто понимаю, что лучше использовать NSDictionaries, так как это быстрее. Плюс я просто пытаюсь научиться их использовать. –

ответ

1

Если бы я не заставить использовать строки, я хотел бы сделать это следующим образом:

NSArray *nums0 = @[@1,@2,@3]; 
NSArray *nums1 = @[@3,@4,@5]; 

NSMutableSet *intersection = [NSMutableSet setWithArray:nums0]; 
[intersection intersectSet:[NSSet setWithArray:nums1]]; 

NSArray *numsInCommon = [intersection allObjects]; 

numsInCommon будет содержать @ 3, что это число, которое находится в оба массива

+0

В основном я занимаюсь цифрами. Единственная причина, по которой я использую строки, потому что я думал, что это единственный способ справиться с числами и NSDictionary. –

+0

Нет, существует множество способов борьбы с числами и NSDictionary. Нечто похожее на то, что у вас есть, может быть: [INNumbers setObject: @ [@ 0, @ 1, @ 2, @ 3, @ 4, @ 5, @ 6, @ 7] forKey: @ "0"]; Это приведет к набору чисел в словаре для ключа 0, поэтому его легко сравнивать и использовать. – Emilio

+0

нет, что NSNumber для –

1

В вашем примере значения, хранящиеся в словаре, являются строковыми литералами, которые трудно анализировать и повторно тестировать на тесты членства. Может быть, вы хотели бы использовать NSSet S:

#import <Foundation/Foundation.h> 

int main() 
{ 
    NSSet *numbers1 = [NSSet setWithObjects:@0, @1, @2, nil]; 
    NSSet *numbers2 = [NSSet setWithObjects:@0, @4, @5, nil]; 

    if([numbers1 intersectsSet : numbers2]) { 
     NSLog(@"The two sets have at least one element in common!"); 

     /* Let's obtain the intersection: */ 
     NSSet *common = [numbers1 objectsPassingTest:^BOOL(id obj, BOOL *stop) { 
         if ([numbers2 containsObject:obj]) { 
          return YES; 
         } else { 
          return NO; 
         } 
     }]; 
     for (id o in common) { 
      NSLog(@"%@", o); 
     } 
    } 
    return 0; 
} 
+0

Лучше использовать NSSets вместо NSArray? –

+0

их дороже строить - так что это зависит от варианта использования. для тестов на пересечение возможно .. мы говорим о <наносекундах в любом случае: D –

+0

спасибо, что это выглядит лучше всего подходит для того, что я имею в виду. –

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