В C # 3.0 + .NET Framework 4 общий Dictionary<TKey,TValue>
даже лучше, чем Hashtable, потому что вы можете использовать ElementAt()
метод расширения *1003* для индексации в базовый динамический массив, где элементы KeyValuePair<TKey,TValue>
сохранено:
using System.Linq;
Random _generator = new Random((int)DateTime.Now.Ticks);
Dictionary<string,object> _elements = new Dictionary<string,object>();
....
Public object GetRandom()
{
return _elements.ElementAt(_generator.Next(_elements.Count)).Value;
}
Однако, насколько я знаю, Hashtable (или его потомство по словарю) не является реальным решением этой проблемы, потому что Put () может быть только амортизирован O (1), не верноO (1), потому что это O (N) на границе динамического изменения размера.
Есть ли реальное решение этой проблемы?Все, о чем я могу подумать, это если вы укажете начальную емкость Dictionary / Hashtable на порядок выше ожидаемой, то вы получите O (1) операций, потому что вам никогда не нужно изменять размер.