Member 9581909 Ответов: 2

Как хранить один ключ и несколько значений в словаре


Привет Друзья,

У меня есть сценарий, в котором мне нужно иметь словарь со строковым ключом и связанными с ним двумя строковыми значениями, как показано ниже.
Ключ выделен жирным шрифтом.
Я использую Visual studio 2008,framework 3.5. и c#.


dictionary<string,string,string>

Что я уже пробовал:

Я попробовал следующий подход:

1. dictionary<string,object>..........где объект инкапсулировал мои два обязательных поля.
Но мне пришлось бы нести дополнительные накладные расходы на приведение при извлечении значений.

2.Кто-то предложил мне использовать

dictionary<string,list><string>>

но я предполагаю, что список сам по себе является коллекцией объектов и также будет включать накладные расходы на кастинг.


Так что, ребята, пожалуйста, помогите мне....
существует ли в c# какая-либо структура данных, которая может хранить несколько значений в виде типов значений?


Спасибо
Варун

Ravi Bhavnani

> существует ли в c# какая-либо структура данных, которая может хранить несколько значений в виде типов значений?

Да. Смотрите Кортеж для хранения 1-8 значения.
https://www.tutorialsteacher.com/csharp/csharp-tuple

/Рави

2 Ответов

Рейтинг:
16

Fredrik Bornander

Если вы ленивы, создайте Dictionary от string и Tuple<string,string>.

IDictionary<string, Tuple<string, string>> myDictionary = new Dictionary<string, Tuple<string, string>>();

Если вы не ленивы, создайте класс, который содержит ваши две строки (Я собираюсь назвать их Foo и Бар).
public class MyOwnType {
   public string Foo { get; set; }
   public string Bar { get; set; }
   public MyOwnType(string foo, string bar) {
       Foo = foo;
       Bar = bar;
   }
}

IDictionary<string, MyOwnType> myDictionary = new Dictionary<string, MyOwnType>();


Надеюсь, это поможет,
Фредрик


Maciej Los

Приятно!

Рейтинг:
1

Maciej Los

В зависимости от ситуации вы можете использовать по крайней мере несколько подходов, таких как:
1. Dictionary<TKey, List<TValue>>
2. Dictionary<TKey, List<ComplexObject>>
3. Dictionary<TKey, Tuple<TValue1, TValue2>>
и т.д.

Основанный на Документация MSDN[^], вы можете создать объект словаря для создания связи между расширениями файлов и приложением, которое может открывать эти расширения. Например:

Dictionary<string, List<string>> openWith = 
            new Dictionary<string, List<string>>();

        // Add some elements to the dictionary. There are no 
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("notepad.exe", new List<string>(){".txt", ".vbs", ".csv"});
        openWith.Add("winword.exe", new List<string>(){".txt", ".vbs", ".csv", ".htm", ".html", ".doc", ".docx", ".dot", ".dotx", ".docm", ".dotm"});
        //and so on...