Как обращаться к элементам в словаре <string, string> по индексу integer?
Я создал коллекцию Dictionary <string, string>
, чтобы я мог быстро ссылаться на элементы с помощью строкового идентификатора.
Но теперь мне также нужно получить доступ к этому коллективу с помощью счетчика индексов (foreach не будет работать в моем реальном примере).
Что мне нужно сделать для коллекции ниже, чтобы я мог получить доступ к своим элементам с помощью целочисленного индекса?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestDict92929
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> events = new Dictionary<string, string>();
events.Add("first", "this is the first one");
events.Add("second", "this is the second one");
events.Add("third", "this is the third one");
string description = events["second"];
Console.WriteLine(description);
string description = events[1]; //error
Console.WriteLine(description);
}
}
}
Ответы
Ответ 1
Вы не можете. И ваш вопрос свидетельствует о том, что Dictionary<TKey, TValue>
- упорядоченный список. Это не. Если вам нужен упорядоченный словарь, этот тип не для вас.
Возможно, OrderedDictionary является вашим другом. Он обеспечивает целочисленную индексацию.
Ответ 2
Вы не можете. Как уже было сказано, словарь не имеет порядка.
Сделайте свой СОБСТВЕННЫЙ КОНТЕЙНЕР, который предоставляет IList
и IDictionary
... и внутренне управляет обоими (список и словарь). Это то, что я делаю в этих случаях. Таким образом, я могу использовать оба метода.
В принципе
class MyOwnContainer : IList, IDictionary
а затем внутренне
IList _list = xxx
IDictionary _dictionary = xxx
то в add/remove/change... обновите оба.
Ответ 3
Для этого можно использовать класс KeyedCollection<TKey, TItem>
в пространстве имен System.Collections.ObjectModel
. Там только один получил: он абстрактный. Поэтому вам придется унаследовать его и создать свой собственный:-). В противном случае используйте не общий тип OrderedDictionary
.
Ответ 4
Вы не можете: индекс не имеет смысла, потому что словарь не упорядочен - и порядок, в котором элементы возвращаются, когда перечисление может измениться при добавлении и удалении элементов. Вам нужно скопировать элементы в список, чтобы сделать это.
Ответ 5
Dictionary
не сортируется/упорядочивается, поэтому номера индексов будут бессмысленными.