Я сделаю все возможное, чтобы дать полное определение проблемы.Чтобы проиллюстрировать проблему, я приведу пример позже в моем вопросе.Возможно, вы захотите сначала перейти к примеру и прочитать мое определение проблемы позже.
Проблема
У меня есть карта, представляющая пары ключ-значение.Ключи могут заканчиваться -NUMBER
, где NUMBER
- целое число.Однако могут также присутствовать клавиши, не заканчивающиеся тире и цифрой.
Клавиша перед начальным -NUMBER
также может содержать тире.
Может быть несколько клавиш, начинающихся ста же строка и заканчивается разными номерами.
Также может быть несколько клавиш, начинающихся с разных строк и заканчивающихся цифрами.
Общие условия
- Все ключи уникальны
- Карта не упорядочена
- Порядок ключей случайный
- Можно с уверенностью предположить, что все строки в ключах являются верхнимиcase
- Если есть ключ, заканчивающийся тире и цифрой
n
больше , гарантируется, что все ключи начинаются с одной строки и заканчиваются всеми цифрами *На карте присутствуют 1034 * с 1 <<code>m <<code>n. - Не имеет значения, остаются ли оригинальные ключи, заканчивающиеся цифрами, в конечном наборе или нет
Фокус на решение
Решение должно быть сосредоточено не на оптимизации времени выполнения или пространственной сложности, а на удобочитаемости и удобстве обслуживания.Максимальное количество записей на карте - около 200, и приложение не ожидает большого трафика.
Пример
Ввод:
{
"FIRST-KEY" = "FOO",
"SECOND-KEY-3"= "BAZ",
"THIRD-KEY-2" = "BAR",
"SECOND-KEY-1"= "FOO",
"SECOND-KEY-2"= "BAR",
"THIRD-KEY-1" = "FOO"
}
Ожидаемый результат:
{
"FIRST-KEY" = "FOO",
"SECOND-KEY"= ["FOO", "BAR", "BAZ"],
"THIRD-KEY" = ["FOO", "BAR"]
}
или (если исходные ключи остаются в результате):
{
"FIRST-KEY" = "FOO",
"SECOND-KEY-3"= "BAZ",
"THIRD-KEY-2" = "BAR",
"SECOND-KEY-1"= "FOO",
"SECOND-KEY-2"= "BAR",
"THIRD-KEY-1" = "FOO",
"FIRST-KEY" = "FOO",
"SECOND-KEY" = ["FOO", "BAR", "BAZ"],
"THIRD-KEY" = ["FOO", "BAR"]
}
Заключительные примечания
Мое решение должнобыть реализован в ColdFusion.Входные данные, на которые я должен ссылаться как на карту в начале моего вопроса, называются struct в ColdFusion land.
Вы можете сформулировать свой ответ в ColdFusion (предпочтителен синтаксис сценария), но вы можететакже выберите любой другой язык, который вы предпочитаете (включая псевдокод), если вы не используете стандартную библиотеку другого языка, которую я не могу использовать в ColdFusion.