Насколько я могу судить, ваше решение хорошо и его будет сложно улучшить.
Единственное, что я хотел бы сделать, это использовать хеширование для словаря, а не отсортированный список ключей и двоичный поиск. Вы можете использовать Delphi, TKey
предполагая , что его производительность была разумной. Для TValue
вас будет использовать пользовательские записи, реализующие вашу карту (положение и длина). Аналогично для TDictionary<string,string>
. Вам нужно было бы реализовать свой собственный компаратор, который можно было бы сделать достаточно легко без выделения кучи.
Сказав все это, вы на 100% уверены, что выделение кучи столь же зло, как вы думаете, для этого приложения? Вы должны попробовать наивную реализацию, используя string
и профилируя приложение, чтобы доказать, что оно тратит значительное время в коде словаря. Еще одним преимуществом такого подхода будет то, что, если действительно проблема с выделением кучи является проблемой, вы можете использовать string
основанную версию в качестве эталонной реализации для целей тестирования. Ваша версия, основанная на смещении указателя и длине, наверняка будет фабрикой ошибок.