У меня есть данные, структурированные в виде таблицыЗаказал столик структура данных
+------+------+------+------+
| | Col1 | Col2 | Col3 |
+------+------+------+------+
| Row1 | 1 | 2 | 3 |
| Row2 | 5 | 5 | 6 |
| Row3 | 9 | 2 | 7 |
+------+------+------+------+
я ищу структуру данных, которая позволяет следующее:
- Быстрая итерация столбца и строки (получить значения для столбца или строк. (Не стоит дорожать итерацией в одном направлении, чем в другом)
- Быстрое добавление и удаление целых строк и столбцов (снова обе операции должны быть одинаково быстрыми и должны быть не более O (n))
- Заказ на основе заказа на размещение и переупорядочивания. Заказ будет рассчитываться с помощью некоторых компараторов и обычно зависит от данных в строке или столбце, но не от каких-либо имен или таких
- Хранить данные, отличные от цифр (У нас есть смешанные данные, но я планирую использовать класс контейнера для фактические данные в любом случае)
Кроме того, строки и столбцы будут иметь метаданные (имя, цвет и тому подобное). Все эти операции часто происходят в нашей системе. В настоящее время мы сохраняем строку данных на основе, и в столбцах нет ссылки на связанные с ними данные. Это делает удаление столбца или повторение его данных очень утомительным.
Первое, что возникло у меня в голове, это Guava Table
, но это не упорядочено, и я не уверен, что легко удалить целую строку или столбец, хотя это может сделать очистка карты строк или столбцов.
Массивы в качестве хранилища для хранения не будут работать из-за необходимости добавления и удаления. (Хотя я мог бы предсказать, насколько большой будет таблица, и создать новые таблицы для удаления, но мне не нравится это решение, даже если оно может быть скрыто от пользователя)
Я был бы признателен за любые идеи относительно как реализовать такую структуру данных.
Чтобы уточнить, мне не нужна готовая библиотека, которая делает это, но я ищу структуру данных, которая позволила бы мне создать это. Я уже знаю, что я буду хранить метаданные строк и столбцов в отдельных списках, например
Просьба уточнить, что такое «заказ» в вашем случае? –
Другой вопрос: вам нужен O (1) доступ по индексу или O (k) в порядке (k - количество столбцов/строк)? –
Для доступа по индексу O (k) все в порядке, мы не часто это делаем (хорошо, технически мы делаем, потому что мы не можем перебирать столбцы, но это то, что я хотел бы изменить). Обычно заказ выполняется по порядку размещения, хотя в конце мы обычно упорядочиваем по строке или столбцу (строка с наибольшим результатом в верхнем или столбце слева) – Chris