2013-03-13 12 views
1
#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 


     NSMutableString *outputStringSet = [[NSMutableString alloc] init]; 
     NSMutableString *outputStringArray = [[NSMutableString alloc] init]; 
     NSMutableSet *mySet = [[NSMutableSet alloc] init]; 
     NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity: 10]; 
     int userInput; 

     NSLog(@"Enter 10 numbers"); 

     for(int i = 0; i < 10; i++) { 
      scanf("%i", &userInput); 
      NSNumber *input = [[NSNumber alloc] initWithInt: userInput]; 
      [myArray addObject:input]; 
      if([mySet member: input]) { 
       [mySet addObject: input]; 
      } 

     } 
     for (int k = 0; k < [myArray count]; k++) { 

      [outputStringArray appendFormat:@"%@, ", [myArray objectAtIndex:k]]; 


     } 

     NSLog(@"%@", [outputStringArray substringToIndex:[outputStringArray length] - 2]); 

     for (int j = 0; j < [myArray count]; j++) { 

      if([mySet containsObject: [myArray objectAtIndex:j]]) { 

       [outputStringSet appendFormat:@"%@, ", [myArray objectAtIndex:j]]; 
      } 

      NSLog(@"%@", outputStringSet); 

     } 
    } 


    return 0; 
} 

代碼打印在該組
爲什麼陣列而不是適當的對象?
請解釋清楚。我有點小菜,並且無法在其他地方找到答案。Objective-C爲什麼這不起作用?上述

感謝

回答

0

你的集合是空的,因爲

if([mySet member: input]) { 
     [mySet addObject: input]; 
    } 

成員:

確定集合是否包含一個對象等於給定對象, 並返回對象如果它存在。

2
if([mySet member: input]) { 
    [mySet addObject: input]; 
} 

要添加的對象集合,如果它已經在裏面。你想要相反:添加對象,如果它的不是在裏面。

這樣:

containsObject:

返回一個布爾值,指示給定 對象:

if (! [mySet member:input]) 
    [mySet addObject:input]; 

順便說一句,你應該在你的測試中使用containsObject:代替member:出現在集合中。

- (BOOL)containsObject:(id)anObject

編輯:你甚至都不需要測試對象是否已經在設定的附加前。畢竟,這是NSSet的主要目的:確保其對象的唯一性。所以如果你添加一個對象兩次,第二個調用將會被無聲地忽略,因爲對象在其中。