3

我有一个可能包含二十多个对象的 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;

谢谢你。

4

2 回答 2

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]];
  }
}

如果您的键是 NSString,那么只需创建具有相应格式的 NSString。

如果您的键不是连续的,那么您将必须有一个包含每个条目的存储日期的并行字典,这样您就会知道每个条目的存储时间并且您可以删除最旧的,或者您需要完全使用其他东西(如果您将顺序整数存储为键,使用 NSMutableArray 不是更容易吗?)

于 2010-10-15T23:29:21.210 回答
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 个键的元素复制到新字典中,然后用新字典替换旧的。如果您想通过其他方式迭代字典,您也可以这样做,但上面的代码不必做太多更改。

于 2010-10-15T23:35:10.000 回答