У меня есть массив элементов, к которым мне нужно обращаться довольно часто и довольно быстро. Я знаю, что свойство этих элементов уникально, и я внедряю массив в класс-обертку, который строит словарь из этого свойства. Поскольку доступ к словарю намного быстрее, чем запрос LINQ к массиву, я подумал, что это будет эффективно.
Но, несмотря на то, что он работает хорошо, решение выглядит немного странно: я сохраняю объект какзначение в словарь, а часть его в качестве ключа.
Есть ли лучше подходящая структура / способ сделать это?
public class FooItem
{
public string Id { get; set; } //UNIQUE
public double Value1 { get; set; }
public string Value2 { get; set; }
}
public class FoosManager
{
private Dictionary<string, FooItem> _dic;
public FooManager(IEnumerable<FooItem> items) {
_dic = new Dictionary<string, FooItem>(
items.ToDictionary(x => x.Id, x => x),
StringComparer.OrdinalIgnoreCase);
}
public FooItem this[string id] => GetItem(id); //Indexer
private FooItem GetItem(string id) {
if (_dic.ContainsKey(id))
return null;
return _dic[id];
}
}