如何从 NSDictionary 中删除对象
Posted
技术标签:
【中文标题】如何从 NSDictionary 中删除对象【英文标题】:how to remove object from NSDictionary 【发布时间】:2010-10-07 07:31:12 【问题描述】:嗨,我有一个 NSdictionary,我在其中添加了一个带有键“国家”的数组。现在我将此字典的值放入数组并按字母顺序对数组进行排序。现在我想将此数组添加到我的字典中(即我想用新的排序数组更新我的字典并从中删除旧数组)。 .......如何做到这一点
我的代码如下
NSArray *countriesToLiveInArray = [NSArray arrayWithObjects:@"Iceland", @"Greenland", @"Switzerland", @"Norway", @"New Zealand", @"Greece", @"Italy", @"Ireland", nil];
NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];
NSArray *tmpary = [countriesToLiveInDict valueForKey:@"Countries"];
NSLog(@"ary value is %@",ary);
NSArray *sortedArray = [tmpary sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSLog(@"sortedArray is %@",sortedArray);
在这里,我想删除 countriesToLiveInArray 并将其替换为具有相同键值的 sortedArray,即 Country 提前谢谢..
【问题讨论】:
为什么不在将数组添加到字典之前对其进行排序? Use objectForKey: not valueForKey: valueForKEy: 在技术上是用于 KVC 的,它的速度非常慢。 【参考方案1】:首先您需要使用NSMutableDictionary
并输入以下代码:
[countriesToLiveInDict removeObjectForKey:@"Countries"];
[countriesToLiveInDict setObject:sortedArray forKey:@"Countries"];
【讨论】:
您不需要删除之前的对象作为键。 -setObject:forKey:如果在已经存在的 kety 上调用,则自动释放前一个对象。【参考方案2】:首先将你的 NSDictionary 设置为 NSMutableDictionary 然后编写以下代码行
[countriesToLiveInDict removeObjectForKey:@"Countries"];
这肯定会解决您的问题。
【讨论】:
是否需要设置countriesToLiveInDict =
?
不要这样做,文档状态 -[NSMutableDictionary removeObjectForKey:]
返回 void
。见:- (void)removeObjectForKey:(KeyType)aKey【参考方案3】:
NSDictionary
不能删除任何东西,请使用NSMutableDictionary
,像这样:
NSMutableDictionary *countriesToLiveInDict = [NSMutableDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];
【讨论】:
【参考方案4】:对于 Swift 3 正如@MathieuF 回答的那样 首先,您需要使用 NSMutableDictionary 并输入以下代码:
countriesToLiveInDict.removeObject(forKey: "Countries")
我在搜索相同问题时发布我的答案并受到@MathieuF 的启发
【讨论】:
以上是关于如何从 NSDictionary 中删除对象的主要内容,如果未能解决你的问题,请参考以下文章
转NSDictionary以及NSMutableDictionary的用法
从 NSDictionary 对象的 NSArray 中,如何获取唯一的 NSArray