2009-11-07 32 views
0

红宝石代码(IRB)[目标c]大约的NSMutableArray

irb(main):001:0> ary = ["AAA", "BBB", "CCC"] 
=> ["AAA", "BBB", "CCC"] 
irb(main):003:0> ary.index("AAA") 
=> 0 
irb(main):004:0> ary.index("BBB") 
=> 1 
irb(main):005:0> ary.index("CCC") 
=> 2 
irb(main):006:0> ary.index("DDD") 
=> nil 

我想在目标c(NSMutableArray的)做相同。

回答

0

阅读Apple的NSArray和NSMutableArray的文档。

2
NSMutableArray *ary = [NSMutableArray arrayWithObjects:@"AAA",@"BBB",@"CCC",nil]; 
NSLog([ary description]); 
NSInteger ndx = [ary indexOfObjectIdenticalTo:@"AAA"]; 
NSLog(@"%i",ndx); 
ndx = [ary indexOfObjectIdenticalTo:@"BBB"]; 
NSLog(@"%i",ndx); 
ndx = [ary indexOfObjectIdenticalTo:@"CCC"]; 
NSLog(@"%i",ndx); 
ndx = [ary indexOfObjectIdenticalTo:@"DDD"]; 
NSLog(@"%i",ndx); 

可可方法都很自我解释,所以浏览标题可以帮助您解决几乎任何问题。

编辑:从NSArray的改变NSMutableArray里,补充说明:

注:最后一个方法返回-1,而不是零。

+2

你已经使用了indexOfObjectIdenticalTo。幸运的是,由于编译器优化,这将在您提供的示例中起作用,但不能保证这样做。你应该使用-indexOfObject :. 此外,最后一种情况下返回NSNotFound,它不是-1。最后,你应该使用NSUInteger,而不是NSInteger,如果我想变得非常挑剔,我会指出你会使用%lu格式说明符并将ndx转换为unsigned long,坦率地说,它很丑陋,但你可以责怪苹果为那个。 –

+0

哎呀!感谢克里斯的更正。我混淆了哪种方法匹配内存中具有完全相同地址的对象,以及与具有完全相同值的对象匹配的对象。以为我已经得到它的权利,因为它正确执行(如果它编译:出货!)。 –