我想在目标C中以集合(对象,键)的形式保存一些对象。我发现NSMutableDictionary
很合适,但问题是我无法取回我想要的对象(最后添加的对象,第一个添加的对象.. .)。有更好的方法吗?
4 回答
您可以使用您添加到 Dictionary 的对象的键来取回您的对象:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"A" forKey:@"a"];
NSString *strA = [dict objectForKey:@"a"];
将您的密钥放入 NSMutableArray 将帮助您获得最后一个/第一个密钥。
希望有帮助!
对于键值对,NSDictionary 或 NSMutableDictionary 是正确的解决方案。
任何给定键只有一个值,设置新值将覆盖旧值。
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setValue:@"World" forKey:@"Hello"];
NSLog(@"Hello %@", [myDictionary objectForKey:@"Hello"]); // prints Hello World
[myDictionary setValue:@"StackOverflow" forKey:@"Hello"];
NSLog(@"Hello %@", [myDictionary objectForKey:@"Hello"]); // prints Hello StackOverflow
[myDictionary setValue:nil forKey:@"Hello"];
NSLog(@"Hello %@", [myDictionary objectForKey:@"Hello"]); // prints Hello (null)
字典用于在您拥有密钥时访问数据。它们不是有序容器。
如果您需要根据将数据添加到容器的时间来检索数据,则需要 LIFO(又名堆栈)、FIFO(又名队列)或 deque(又名双端队列)类型的容器。您可以先在 wikipedia 上阅读它们,但如果您想成为一名程序员,我建议您至少阅读一本像样的算法和数据结构书籍。
AFAIK 没有预定义的类可以在可可中实现这些抽象,但它们都很容易用数组来完成。NSArray
haslastObject
和objectAtIndex:
方法,NSMutableArray
还有addObject:
,和方法insertObject:atIndex:
,它们基本上是 LIFO/FIFO/deque 访问的原语(假设当这些方法需要索引时使用 0 )。removeLastObject
removeObjectAtIndex:
如果您想获取最后添加的对象或按索引获取对象,NSMutablearray 是最好的方法。首先添加的对象位于对象索引 0 处,最后添加的对象位于 [count-1] 索引处