web-dev-qa-db-fra.com

Comment insérer un élément dans un objet paire clé / valeur?

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.

61
Clay
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.

114
Ian P

Peut-être que OrderedDictonary vous aidera.

5
Matthew Jones

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.

3
Daniel Plaisted

Vous pouvez utiliser un OrderedDictionary , mais je me demanderais pourquoi vous voudriez le faire.

2
Mitch Wheat

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.

2
Rubys

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.

1
NibblyPig

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.

0
Dan Diplo