我正在使用NSMutableArray
并意识到使用字典对于我想要实现的目标来说要简单得多。
我想将一个密钥保存为NSString
,将值保存为字典中的int
。这是怎么做到的?其次,mutable和普通字典有什么区别?
答案 0 :(得分:189)
可以更改可变字典,即可以添加和删除对象。 immutable 一旦创建就会被修复。
创建并添加:
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
[dict setObject:[NSNumber numberWithInt:42] forKey:@"A cool number"];
并检索:
int myNumber = [[dict objectForKey:@"A cool number"] intValue];
答案 1 :(得分:32)
通过设置您使用setValue:(id)value forKey:(id)key
对象的NSMutableDictionary
方法:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setValue:[NSNumber numberWithInt:5] forKey:@"age"];
或者在现代Objective-C中:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict[@"age"] = @5;
可变性和“正常”之间的差异是可变性。即您可以更改NSMutableDictionary
(和NSMutableArray
)的内容,而不能使用“普通”NSDictionary
和NSArray
答案 2 :(得分:12)
当声明数组时,只有我们必须在NSDictionary中添加键值,如
NSDictionary *normalDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Value1",@"Key1",@"Value2",@"Key2",@"Value3",@"Key3",nil];
我们无法添加或删除此NSDictionary中的键值
在NSMutableDictionary中,我们也可以在数组初始化之后添加对象 使用这种方法
NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]init];'
[mutableDict setObject:@"Value1" forKey:@"Key1"];
[mutableDict setObject:@"Value2" forKey:@"Key2"];
[mutableDict setObject:@"Value3" forKey:@"Key3"];
要删除键值,我们必须使用以下代码
[mutableDict removeObject:@"Value1" forKey:@"Key1"];
答案 3 :(得分:9)
<强>目标C 强>
创建:
NSDictionary *dictionary = @{@"myKey1": @7, @"myKey2": @5};
变化:
NSMutableDictionary *mutableDictionary = [dictionary mutableCopy]; //Make the dictionary mutable to change/add
mutableDictionary[@"myKey3"] = @3;
简写语法称为Objective-C Literals
。
<强>夫特强>
创建:
var dictionary = ["myKey1": 7, "myKey2": 5]
变化:
dictionary["myKey3"] = 3
答案 4 :(得分:1)
你想问的是“mutable和non-mutable数组或字典之间有什么区别。”很多时候,不同的术语用于描述您已经了解的事物。在这种情况下,您可以将术语“可变”替换为“动态”。因此,可变字典或数组是“动态”的并且可以在运行时更改,而非可变字典或数组是“静态”的并且在代码中定义并且在运行时不会更改(换句话说) ,您不会添加,删除或可能对元素进行排序。)
至于如何完成,你要求我们在这里重复文档。您需要做的就是搜索示例代码和Xcode文档,以确切了解它是如何完成的。但是当我第一次学习时,可变的东西也把我扔了,所以我会给你那个!
答案 5 :(得分:0)
作为参考,您还可以利用initWithDictionary
来将NSMutableDictionary
与原义字符一起初始化:
NSMutableDictionary buttons = [[NSMutableDictionary alloc] initWithDictionary: @{
@"touch": @0,
@"app": @0,
@"back": @0,
@"volup": @0,
@"voldown": @0
}];