删除NSMutableDictionary中索引20之后的所有对象?

时间:2010-10-15 23:18:23

标签: iphone objective-c trim nsmutabledictionary

我有一个可能包含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;

谢谢。

2 个答案:

答案 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个键的元素复制到新词典中,然后用新词典替换旧词典。如果你想通过其他方式迭代字典,你也可以这样做,但上面的代码不需要改变太多。