Ok ... voici une question de softball ...
Je dois juste pouvoir insérer une paire clé/valeur dans un objet situé à une position spécifique. Je travaille actuellement avec une table de hachage qui, bien entendu, ne permet pas cette fonctionnalité. Quelle serait la meilleure approche?
MISE À JOUR: En outre, j'ai besoin de la capacité de rechercher par la clé.
Par exemple ... trop simplifié et pseudo-codé, mais devrait en comprendre le sens
// existing Hashtable
myHashtable.Add("somekey1", "somevalue1");
myHashtable.Add("somekey2", "somevalue2");
myHashtable.Add("somekey3", "somevalue3");
// Some other object that will allow me to insert a new key/value pair.
// Assume that this object has been populated with the above key/value pairs.
oSomeObject.Insert("newfirstkey","newfirstvalue");
Merci d'avance.
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("Key1", "Value1"),
new KeyValuePair<string, string>("Key2", "Value2"),
new KeyValuePair<string, string>("Key3", "Value3"),
};
kvpList.Insert(0, new KeyValuePair<string, string>("New Key 1", "New Value 1"));
En utilisant ce code:
foreach (KeyValuePair<string, string> kvp in kvpList)
{
Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value);
}
le résultat attendu devrait être:
Key: New Key 1 Value: New Value 1
Key: Key 1 Value: Value 1
Key: Key 2 Value: Value 2
Key: Key 3 Value: Value 3
La même chose fonctionnera avec un KeyValuePair ou tout autre type que vous souhaitez utiliser.
Modifier -
Pour rechercher par la clé, vous pouvez effectuer les opérations suivantes:
var result = stringList.Where(s => s == "Lookup");
Vous pouvez le faire avec un KeyValuePair en procédant comme suit:
var result = kvpList.Where (kvp => kvp.Value == "Lookup");
Dernière modification -
Défini la réponse spécifique à KeyValuePair plutôt qu'à une chaîne.
Peut-être que OrderedDictonary vous aidera.
Avez-vous besoin de rechercher des objets à l'aide de la clé? Sinon, envisagez d'utiliser List<Tuple<string, string>>
ou List<KeyValuePair<string, string>>
si vous n’utilisez pas .NET 4.
Vous pouvez utiliser un OrderedDictionary , mais je me demanderais pourquoi vous voudriez le faire.
Utilisez une liste chaînée. Il a été conçu pour cette situation exacte.
Si vous avez toujours besoin du dictionnaire O(1) recherches, utilisez un dictionnaire et une liste chaînée.
Les tables de hachage ne sont pas triées de manière inhérente; votre meilleur choix est d'utiliser une autre structure telle qu'une liste triée ou une liste de tableaux.
Je voudrais utiliser le Dictionary<TKey, TValue>
(tant que chaque clé est unique).
EDIT: Désolé, vous avez réalisé que vous vouliez l'ajouter à une position spécifique. Ma faute. Vous pouvez utiliser un SortedDictionary mais cela ne vous laissera toujours pas insérer.