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;
}

上面的代码打印了数组,但没有打印集合中的适当对象
为什么?
请解释清楚。我有点菜鸟,在其他任何地方都找不到答案。

谢谢

4

2 回答 2

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

如果对象已经在集合中,则将其添加到集合中。您想要相反:如果对象不在其中,则添加该对象。

因此:

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

顺便说一句,您应该在测试中使用containsObject:而不是:member:

containsObject:

返回一个布尔值,指示给定对象是否存在于集合中。

- (BOOL)containsObject:(id)anObject

编辑:您甚至不需要在添加之前测试对象是否已经在集合中。毕竟,这是 a 的主要目的NSSet:确保其对象的唯一性。因此,如果您添加一个对象两次,第二次调用将被忽略,因为该对象已经在其中。

于 2013-03-13T09:38:32.600 回答
0

你的集合是空的,因为

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

成员:

确定集合是否包含与给定对象相等的对象,如果存在则返回该对象。

于 2013-03-13T09:38:03.860 回答