Мы можем решить это путем моделирования проблемной области в решении. Подумайте о своем домене, это холст / сетка, на которой вы хотите визуализировать объекты, которые вы можете столкнуть, вы пытаетесь решить проблему планирования? На основании этого дизайна ваша структура данных.
Давайте перечислим цели нашей структуры данных -
- Мы должны иметь возможность быстро вставлять объекты.
- Мы должны иметь возможность эффективно обращаться к объектам с помощью Position.X.
- Мы должны быть в состоянии получить позицию объекта по его идентификатору.
Создайте собственную структуру данных , которая отвечает этим целям, путем инкапсуляции отсортированного списка и хеш-таблицы в вашем собственном классе -
публичный класс MyCanvas
{
private IDictionary _positionMap = new SortedList ();
private IDictionary _objectMap = new HashTable ();
public void Add(MyObject obj)
{
_positionMap.Add(obj.Location.X, obj);
_objectMap.Add(obj.Id, obj);
}
public MyObject GetPositionById(string id)
{
return _objectMap[id].Location.X;
}
public IEnumerable<MyObject> SortedByX()
{
_positionMap.GetEnumerator();
}
public void Delete(string id)
{
var obj = _objectMap[id];
_locationMap.Remove(obj.Location.X);
_objectMap.Remove(id);
}
* *} Тысяча двадцать-один
Примечание - обратите внимание, что код может не скомпилироваться, и о таких проблемах, как обработка ошибок, потоки и т. Д., Нужно позаботиться.