Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird (https://www.delphipraxis.net/196025-tmultimap-problem-wenn-geloeschter-key-erneut-hinzugefuegt-wird.html)

Dawn87 16. Apr 2018 16:26

Delphi-Version: XE5

TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird
 
Liebe Foristen,

ich verwende in einem Projekt die Klasse TMultiMap aus der Library "delphi-coll". Das ist im Prinzip ein TDictionary das den gleichen Key mehrfach enthalten darf.

Jetzt bin ich über ein Phänomen gestolpert. Wenn ich einen Key (und somit auch alle dazugehörigen Values) aus meiner MultiMap entferne und anschließend den gleichen Key mit anderen Values hinzufüge, bleibt meine TMultiMap danach leer. Hat dieses Probem schon einmal jemand beobachten können oder mache ich sogar etwas grundsätzliches falsch? Der folgende Unit-Test demonstriert das Problem:

Delphi-Quellcode:
unit TestMultiMapU;

interface

uses
  TestFramework, Collections.MultiMaps;

type
  TestMultiMap = class(TTestCase)
  strict private
    FMultiMap: TMultiMap<string, string>;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure RemoveKey_AddKeyAgain_MultiMapShouldContainKey;
  end;

implementation

uses
  Collections.Base;

procedure TestMultiMap.RemoveKey_AddKeyAgain_MultiMapShouldContainKey;
const
  csKey = 'Key';
  csValue = 'Value';
var
  Values: ISequence<string>;
begin
  FMultiMap.Add(csKey, csValue);

  CheckEquals(1, FMultiMap.Count); // OK
  CheckTrue(FMultiMap.TryGetValues(csKey, Values)); // = True

  FMultiMap.Remove(csKey);

  FMultiMap.Add(csKey, csValue);

  CheckEquals(1, FMultiMap.Count); // OK
  CheckTrue(FMultiMap.TryGetValues(csKey, Values)); // = False (Es wurde ja wieder ein Eintrag mit .Add angelegt, wieso kann dieser also nicht ausgelesen werden?)
end;

procedure TestMultiMap.SetUp;
begin
  FMultiMap := TMultiMap<string, string>.Create;
end;

procedure TestMultiMap.TearDown;
begin
  FMultiMap.Free;
end;

initialization

// Alle Testfälle beim Testprogramm registrieren
RegisterTest(TestMultiMap.Suite);

end.
Über jeden Ratschlag bin ich dankbar!

Dawn87 16. Apr 2018 18:19

AW: TMultiMap: Problem wenn gelöschter Key erneut hinzugefügt wird
 
Ich habe die bisher genutzte Library gegen die Spring4d.Collections ausgetauscht. Das Problem besteht nun nicht mehr.

Es war offenbar ein Bug in der TMultiMap selbst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz