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!