2010-04-30 32 views
47

Ok ... ecco una domanda di softball ...Come inserire un oggetto in un oggetto coppia chiave/valore?

Ho solo bisogno di essere in grado di inserire una coppia chiave/valore in un oggetto in una posizione specifica. Attualmente sto lavorando con un Hashtable che, ovviamente, non consente questa funzionalità. Quale sarebbe l'approccio migliore?

AGGIORNAMENTO: Inoltre, ho bisogno della possibilità di cercare la chiave.

Per esempio ... semplificato e pseudocoded ma dovrebbe trasmettere il punto

// 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"); 

Grazie in anticipo.

risposta

83
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")); 

utilizzando questo codice:

foreach (KeyValuePair<string, string> kvp in kvpList) 
{ 
    Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value); 
} 

l'uscita prevista dovrebbe essere:

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 

Lo stesso lavorare con un KeyValuePair o qualsiasi altro tipo che si desidera utilizzare ..

Modifica -

ad occhiata dal tasto, è possibile effettuare le seguenti operazioni:

var result = stringList.Where(s => s == "Lookup"); 

Si potrebbe fare questo con un KeyValuePair effettuando le seguenti operazioni:

var result = kvpList.Where (kvp => kvp.Value == "Lookup"); 

Ultima modifica -

Realizzato la risposta specifica per KeyValuePair anziché per la stringa.

+0

Mi scuso, ho appena aggiornato per chiarire che ho bisogno dell'abilità di cercare la chiave. – Clay

+0

Vedere la mia modifica per come farlo. –

+1

Eccellente, grazie! – Clay

1

Hashtables non sono intrinsecamente ordinate, la soluzione migliore è quella di utilizzare un'altra struttura, come un SortedList o un ArrayList

+0

Hashtable è un codice preesistente che preferirei non modificare in questo momento. – Clay

0

Vorrei utilizzare il Dictionary<TKey, TValue> (a condizione che ogni chiave è unica).

MODIFICA: Spiacente, ho capito che volevi aggiungerlo a una posizione specifica. Colpa mia. È possibile utilizzare uno SortedDictionary ma questo ancora non ti permetterà di inserire.

+0

Ma il dizionario manca 'Insert()' .... –

3

Hai bisogno di cercare oggetti con la chiave? In caso contrario, considerare l'utilizzo di List<Tuple<string, string>> o List<KeyValuePair<string, string>> se non si utilizza .NET 4.

+0

Sì, ho bisogno di cercare la chiave. – Clay

2

È possibile utilizzare uno OrderedDictionary, ma vorrei chiedersi perché si vorrebbe farlo.

2

Utilizzare un elenco collegato. È stato progettato per questa esatta situazione.
Se sono ancora necessarie le ricerche nel dizionario O (1), utilizzare sia un dizionario sia un elenco collegato.

Problemi correlati