Ich habe eine IImmutableDictionary<int, MyType>
in C#. Während der Ausführung meines Programms, würde Ich mag MyType
Instanzen auf einigen Befehlen basierend hinzuzufügen und zu entfernen:Erhalten Sie eine neue ID in einer deterministischen Weise
public sealed class AddMyTypeCommand : ICommand
{
public readonly MyType myTypeToAdd;
// etc...
}
public sealed class RemoveMyTypeCommand : ICommand
{
public readonly int keyToRemove;
// etc...
}
Wenn ein MyType
hinzugefügt wird, würde Ich mag einen frischen int
Schlüssel generieren, die nicht bereits im Wörterbuch vorhanden ist.
Ich nehme an, dass ich nie ausgehen werde int
s, weil Schlüssel später entfernt und wiederverwendet werden können.
Der wichtigste Haken ist, dass ich möchte, dass der Prozess deterministisch ist. Für einen gegebenen Strom von ICommand
s muss der Code dasselbe ausführen (und die gleichen Schlüssel erzeugen!) Auf verschiedenen Maschinen.
Was ist ein robuster, wartbarer und effizienter Ansatz zur Erreichung des Schlüsselgenerierungsschritts?
Zum Beispiel kann eine langsame Annäherung wäre: ab int.MinValue
, zu Fuß nach oben, bis eine neue ID gefunden wird.
Verwenden Sie 'GetHashCode()'? –
Gibt es irgendwelche Anforderungen für diese IDs (dh ist 1,2,3,4,5, etc) eine gültige Möglichkeit, IDs zu generieren? – Kolichikov
HashCode oder Checksummen sind ein erster Ansatz, aber es gibt eine geringe Wahrscheinlichkeit, dass 2 verschiedene Befehle denselben Schlüssel haben. – Graffito