Я создаю функцию чата для своего приложения, и у нас есть набор пользовательских смайликов.
Если пользователь вводит ярлык для одного из этих эмоций в своем комментарии, мы должны быть в состоянии обнаружитьярлыки в порядке появления и замените их на соответствующие эмоции.
Например.
let emotes = [
"app" : "[]"
"happy" : ":)",
]
let userComment = "I am happy"
let expectedResult = "I am :)" // "app" was not replaced because "happy"'s "h" was found first, hence it was evaluated before "app"
Учитывая, что в одном и том же эмоции может появиться несколько случаевкомментарий, есть ли эффективный алгоритм для достижения этой цели?
Я знаю, что range(of:)
есть, чтобы найти диапазон подстроки, но использование этого кажется супер неэффективным, учитывая, что у нас могут быть десятки смайликов.
ОБНОВЛЕНИЕ:
Имейте в виду, что «ключи» (ярлыки) эмоций могут конфликтовать, поэтому перебор словаря эмоций не будет решением.Я изменил пример кода, чтобы отразить это.