Подтвердить что ты не робот

Как вставить элемент в объект пары ключ/значение?

Хорошо... вот вопрос софтбола...

Мне просто нужно иметь возможность вставить пару ключ/значение в объект в определенной позиции. В настоящее время я работаю с 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");

Спасибо заранее.

4b9b3361

Ответ 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, а не для строки.

Ответ 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, но это все равно не позволит вам вставлять.