我在集合中有NSSet
@"x"
,我正在尝试使用实例方法member:
来检查它,如下所示:
NSSet *everythingOnStack = [[NSSet alloc] initWithObjects:program, nil];
NSSet *variablesOnStack = [[NSSet alloc] initWithObjects:([everythingOnStack member:@"x"]),nil];
NSLog(@"Variables on, %@",variablesOnStack);
NSLog(@"Everything on stack,%@",everythingOnStack);
member:
方法似乎没有看到@"x"
,我不知道为什么。以下是NSLog()
输出。我阅读了文档,它似乎应该有效。困惑。
2012-05-21 20:43:07.902 Calculator[21589:f803] Variables on, {(
)}
2012-05-21 20:43:07.904 Calculator[21589:f803] Everything on stack,{(
(
1,
2,
x,
"+"
)
)}
我正在通过斯坦福大学的在线课程学习目标C.
答案 0 :(得分:3)
字符串@"x"
不是 everythingOnStack
的成员。它是任何类型的集合program
的成员(看起来像一个数组)。如果你做[everythingOnStack member:@"x"]
(顺便说一句,括号是不必要的),你会得到nil
,所以你最终得到variablesOnStack
的空集。
要从@"x"
中获取everythingOnStack
,您必须从program
数组中获取它:
[[everythingOnStack member:program] objectAtIndex:3]
请注意,这需要您知道所需对象在数组中的位置。我不确定这会对您的设计产生什么影响 - 看起来您可能正在实施RPN计算器?
答案 1 :(得分:1)
在我看来,你可能误解了这一行的作用:[[NSSet alloc] initWithObjects:program,nil];这会将一个对象(数组“program”)添加到您的集合中,它不会将“program”中的每个对象添加到您的集合中。如果要将数组的每个成员添加到集合中,可以使用NSSet * everythingOnStack = [NSSet setWithArray:program];
如果完成,这样,那么“x”将成为你的集合的成员。但是,你会得到一个单独的集合(我认为所有集合),所以如果你在“程序”中有两次相同的数字,它只会在集合中出现一次。