Как отослать к объектам в Словаре <строку, строку> целочисленным индексом?

Я сделал Словарь<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);
        }
    }
}
10
задан Edward Tanguay 8 March 2010 в 15:18
поделиться

5 ответов

Вы не можете. И ваш вопрос предполагает вашу уверенность в том, что Dictionary является упорядоченным списком. Нет. Если вам нужен упорядоченный словарь, этот тип не для вас.

Возможно, OrderedDictionary - ваш друг. Он обеспечивает целочисленную индексацию.

15
ответ дан 3 December 2019 в 15:51
поделиться

Вы не можете. Как уже было сказано - словарь не имеет порядка.

Сделайте свой собственный контейнер, который раскрывает IList и IDictionary... и внутренне управляет обоими (списком и словарем). Это то, что я делаю в таких случаях. Итак, я могу использовать оба метода.

В основном

class MyOwnContainer : IList, IDictionary

и затем внутренне

IList _list = xxx
IDictionary _dictionary = xxx

затем при добавлении / удалении / изменении... обновить оба.

5
ответ дан 3 December 2019 в 15:51
поделиться

Нельзя: индекс не имеет смысла, потому что словарь не упорядочен, а порядок возврата элементов при перечислении может меняться по мере добавления и удаления элементов. Для этого нужно скопировать элементы в список.

2
ответ дан 3 December 2019 в 15:51
поделиться

Словарь не сортируется/упорядочивается, поэтому номера индексов будут бессмысленны.

2
ответ дан 3 December 2019 в 15:51
поделиться

Для этого можно использовать класс KeyedCollection в пространстве имен System.Collections.ObjectModel . Есть только одна ошибка: это абстрактно. Так что вам придется унаследовать от него и создать свой собственный :-). В противном случае используйте неуниверсальный класс OrderedDictionary .

3
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: