我有一个可能包含20个以上对象的NSMutableDictionary。 如果它包含20个以上的对象,我应该如何删除最旧的条目,直到只剩下20个?
例如,带有对象的NSMutableDictionary:
a = "-1640531535";
b = 1013904226;
c = "-626627309";
d = 2027808452;
e = 387276917;
f = "-1253254618";
g = 1401181143;
h = "-239350392";
i = "-1879881927";
使用最大对象数:5,应该成为:
a = "-1640531535";
b = 1013904226;
c = "-626627309";
d = 2027808452;
e = 387276917;
谢谢。
答案 0 :(得分:1)
如果键是NSNumbers并且您知道它们是连续的,并且您想要删除较低的值,那么:
int limit=20; //set to whatever you want
int excess = limit - [dict count];
if (excess > 0) {
for (int i = 1; i <= excess; i++) {
[dict removeObjectForKey:[NSNumber numberWithInt:i]];
}
}
如果您的密钥是NSStrings,那么只需创建具有相应格式的NSString。
如果您的密钥不是连续的,那么您必须要有一个并行字典,其中包含每个条目的存储日期,因此您可以知道每个条目的存储时间,并且您可以删除最旧的条目,或者您需要使用完全不同的东西(如果你将顺序整数存储为键,使用NSMutableArray会不会更容易?)
答案 1 :(得分:1)
如果你要找的只有20个元素,我会尝试类似的东西:
NSMutableDictionary* newDict = [NSMutableDictionary new];
int count = 0;
for (id theKey in oldDict)
{
[newDict setObject:[oldDict getObjectForKey:theKey] forKey:theKey];
if (++count == 20)
break;
}
[oldDict release];
oldDict = newDict;
我们的想法是将您找到的前20个键的元素复制到新词典中,然后用新词典替换旧词典。如果你想通过其他方式迭代字典,你也可以这样做,但上面的代码不需要改变太多。