Я ищу самый элегантный, быстрый и эффективный способ хранения нескольких объектов класса Point
с индексом / ключом в любом виде коллекции.
Point
содержит такие атрибуты, как index
, posX
, posY
, area
, neighborPoints[]
, AdjacentTriangles[]
и т. Д. И используются для создания триангуляции Делоне и сетки Вороного.
По причинам выбора отдельные точки должны иметь индекс в коллекции, но их не нужно упорядочивать.
Во время триангуляции я создаю и , удаляя точек. Также я хочу пройти через все точки в коллекции. Следовательно, тип сбора должен быть оптимизирован для этих операций.
Вначале я использовал List<Point>
для хранения точек, и вхождение в списке было идентично индексу точки. В случае удаления одной точки списка мне пришлось уменьшить все индексы высших точек. Это звучит довольно неудобно и отнимает много времени.
Именно поэтому я попробовал Dictionary<int, Point>
впоследствии. Здесь индексы являются фиксированными, и если я удалю, например, вторую точку, то все более высокие точки, может быть, Point[5]
останутся Point[5]
, просто Point[1]
больше не будет (возврат null
). Тем не менее, мое время выполнения теперь стало еще длиннее (см. Рисунок), хотя мне больше не нужно выполнять сдвиг индекса. (Почему это так?) ![runtimes](https://i.stack.imgur.com/PSSdt.png)
Использование Hashmap
не имеет смысла для меня, так как тогда я не смог бы использовать вызовы типа Point.posX
(код ошибки CS1061), потому что в Hashmap тип данных не задан.
Есть ли у вас какие-либо предложения относительно эффективного типа сбора с более высокой производительностью?