7

TDictionary があり、それにいくつかの項目を追加します。

for index := 0 to 10 do
   dict.Add(IntToStr(index), index);

ここで、コンテナーを反復処理して、必要なアイテムを削除する必要があります。

pairEnum := dict.GetEnumerator;
while pairEnum.MoveNext do
begin
  if pairEnum.Current.Value mod 2 = 0 then
     dict.Remove(pairEunm.Current.Key);
end;

辞書には奇数しか載っていないと思います。しかし、私が実際に得たものは次のとおりです。

key=1 value=1
key=3 value=3
key=5 value=5
key=7 value=7
key=9 value=9
key=8 value=8 <-

「8」が辞書から削除されなかったのはなぜですか?

さらにアイテムを追加する場合。例えば

for index := 0 to 12 do
   dict.Add(IntToStr(index), index);

すると、結果は正しいです。何故ですか?TDictionary を正しく反復処理して項目を削除するにはどうすればよいですか? ありがとう。

4

3 に答える 3

0

次の形式の反復と反復内の削除は機能しているようです。

var
  Item: TPair<string, integer>;

for Item in dict do
begin
  if Item.Value mod 2 = 0 then
    dict.Remove(Item.Key);
end;

キーと値は消去されていますが、場所は実際には削除されておらず、反復は現在の場所を失わずに続行できるため、これはおそらく正常に機能します。

于 2016-05-15T05:20:14.283 に答える