开发者

How to refer to items in Dictionary<string, string> by integer index?

开发者 https://www.devze.com 2022-12-22 01:56 出处:网络
I made a Dictionary<string, string> collection so that I can quickly reference the items by their string identifier.

I made a Dictionary<string, string> collection so that I can quickly reference the items by their string identifier.

But I now also need to access this collective by index counter (foreach won't work in my real example).

What do I have to do to the collection below so that I can access its items via integer index as well?

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");
  开发者_如何学Python          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);
        }
    }
}


You can't. And your question infers your belief that Dictionary<TKey, TValue> is an ordered list. It is not. If you need an ordered dictionary, this type isn't for you.

Perhaps OrderedDictionary is your friend. It provides integer indexing.


You can not. As was said - a dictionary has no order.

Make your OWN CONTAINER that exposes IList and IDictionary... and internally manages both (list and dictionary). This is what I do in those cases. So, I can use both methods.

Basically

class MyOwnContainer : IList, IDictionary

and then internally

IList _list = xxx
IDictionary _dictionary = xxx

then in add / remove / change... update both.


You can use the KeyedCollection<TKey, TItem> class in the System.Collections.ObjectModel namespace for this. There's only one gotcha: it is abstract. So you will have to inherit from it and create your own :-). Otherwise use the non-generic OrderedDictionary class.


You can't: an index is meaningless because a dictionary is not ordered - and the order in which items are returned when enumerating can change as you add and remove items. You need to copy the items to a list to do that.


Dictionary is not sorted/ordered, so index numbers would be meaningless.

0

精彩评论

暂无评论...
验证码 换一张
取 消