3

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;

ありがとうございました。

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 に答える