Лучшая коллекция для сортировки объектов и удаления по ключу

У меня есть события и метка времени событий. Я хочу, чтобы объекты сортировались по отметке времени. И я хочу удалять старые объекты каждые минуты. Поскольку объекты уже отсортированы по отметке времени, я думаю, что функция, подобная RemoveLesserThenKey, будет работать лучше всего.

Я проверил отсортированный список, но, кажется, у него нет такой функции. Можете ли вы дать мне какой-нибудь совет?

Должен ли я писать свой собственный отсортированный список?

РЕДАКТИРОВАТЬ:
1-События не приходят по времени.
2-Я хочу, чтобы коллекция использовала структуру сортировки (например, BST) для удаления объектов.


person fyo    schedule 02.06.2016    source источник
comment
звучит так, как будто вам просто нужна очередь   -  person Jonesopolis    schedule 02.06.2016
comment
изменяется ли временная метка с течением времени или она неизменна? Объекты добавляются в коллекцию в порядке отметок времени?   -  person D Stanley    schedule 02.06.2016
comment
Я добавил комментарий, и да, время неизменно.   -  person fyo    schedule 02.06.2016
comment
yes объект будет отсортирован по метке времени. я снова отредактировал вопрос.   -  person fyo    schedule 02.06.2016
comment
Похоже, вам нужна приоритетная очередь, в BCL нет реализации.   -  person Lee    schedule 02.06.2016
comment
См. stackoverflow.com/questions/102398/priority-queue-in-net в отношении приоритета. очередь. Классы OrderedBag и OrderedSet могут быть тем, что вам нужно.   -  person Justin Loveless    schedule 02.06.2016
comment
Поскольку события не приходят по времени, может ли случиться так, что событие придет с отметкой времени раньше, чем старые объекты, которые были удалены?   -  person Andrew Morton    schedule 02.06.2016
comment
Я уже проверяю эту ситуацию где-то еще. Но они все равно будут удалены в следующую минуту.   -  person fyo    schedule 02.06.2016


Ответы (2)


SortedDictionary<TKey, TValue> — ваш друг

person Jacek Cz    schedule 02.06.2016
comment
Поскольку ОП, похоже, хотел, чтобы конкретная функция удаляла меньшие ключи, я просто хотел бы добавить, что этого можно было бы добиться, просто перебирая ключи и удаляя записи после определенного момента, когда элементы считаются старыми. Он мог бы также добиться этого с помощью SortedList, удалив записи, начинающиеся с определенного индекса, но поскольку он работает с данными, которые не отсортированы, SortedDictionary<TKey, TValue> является лучшим выбором между ними. - person Justin Loveless; 02.06.2016
comment
Да, я могу удалять объекты, пока не будет выполнено условие. Поскольку мое условие касается только ключевых значений, должен быть более быстрый способ удаления объектов. Просто удалите левую ветвь BST. - person fyo; 02.06.2016
comment
Это считается только ссылкой? Было бы неплохо получить больше подробностей, чтобы конкретизировать ответ о том, как это использовать. - person D. Ben Knoble; 02.06.2016

Я думаю, вам лучше всего написать для этого свой собственный отсортированный связанный список. Вставки могут быть выполнены в худшем случае за время O (n), а удаление всех узлов ниже определенного порога будет простой операцией с линейным временем.

Как вы предложили, вы также можете использовать BST. Вам просто нужно не забывать устанавливать новый корень каждый раз, когда вы выполняете пакетное удаление.

Редактировать: Если подумать об этом, BST окажется очень несбалансированным вправо после нескольких раундов вставки/удаления. Это может не дать многого в плане экономии времени по сравнению со связанным списком.

person Lee Painton    schedule 02.06.2016