Удалить все объекты после индекса 20 в NSMutableDictionary? - PullRequest
3 голосов
/ 16 октября 2010

У меня есть 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 ]

1 голос
/ 16 октября 2010

Если все, что вам нужно, это 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 найденных ключей в новый словарь, а затем заменяете старый новым. Если вы хотите перебрать словарь с помощью других средств, вы можете сделать это тоже, но приведенный выше код не должен сильно измениться.

1 голос
/ 16 октября 2010

Если ключи являются 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?)

...