Как вставить элемент в объект пары ключ/значение?
Хорошо... вот вопрос софтбола...
Мне просто нужно иметь возможность вставить пару ключ/значение в объект в определенной позиции. В настоящее время я работаю с Hashtable, что, конечно, не позволяет использовать эту функциональность. Какой был бы лучший подход?
UPDATE: Кроме того, мне нужна возможность поиска с помощью ключа.
Например, упрощенное и псевдокодированное, но должно передать точку
// 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");
Спасибо заранее.
Ответы
Ответ 1
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"));
Используя этот код:
foreach (KeyValuePair<string, string> kvp in kvpList)
{
Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value);
}
ожидаемый результат должен быть:
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
То же самое будет работать с KeyValuePair или любым другим типом, который вы хотите использовать.
Изменить -
Для поиска по ключу вы можете сделать следующее:
var result = stringList.Where(s => s == "Lookup");
Вы можете сделать это с помощью KeyValuePair, выполнив следующие действия:
var result = kvpList.Where (kvp => kvp.Value == "Lookup");
Последнее редактирование -
Создал ответ, специфичный для KeyValuePair, а не для строки.
Ответ 2
Возможно, OrderedDictonary поможет вам.
Ответ 3
Вам нужно искать объекты по ключу? Если нет, рассмотрите возможность использования List<Tuple<string, string>>
или List<KeyValuePair<string, string>>
, если вы не используете .NET 4.
Ответ 4
Вы можете использовать OrderedDictionary, но я бы поставил под вопрос, почему вы хотели бы это сделать.
Ответ 5
Использовать связанный список. Он был разработан для этой конкретной ситуации.
Если вам все еще нужен поиск словаря O (1), используйте как словарь, так и связанный список.
Ответ 6
Hashtables не сортируются по своему усмотрению, лучше всего использовать другую структуру, такую как SortedList или ArrayList
Ответ 7
Я бы использовал Dictionary<TKey, TValue>
(пока каждый ключ уникален).
EDIT: Извините, вы поняли, что хотите добавить его в определенную позицию. Виноват. Вы можете использовать SortedDictionary, но это все равно не позволит вам вставлять.