【发布时间】:2019-10-18 03:55:02
【问题描述】:
我正在为我的应用创建聊天功能,我们有一组自定义表情符号。
如果用户在他们的评论中键入其中一种表情的快捷方式,我们需要能够按出现顺序检测快捷方式,并将其替换为正确的表情。
例如。
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:) 可以找到子字符串的范围,但是考虑到我们可能有几十个表情符号,使用它似乎效率非常低。
更新:
请注意,表情“键”(快捷方式)可能会发生冲突,因此遍历表情字典不会是答案。我更改了示例代码以反映这一点。
【问题讨论】:
-
您要么必须循环遍历字符串多次,每次使用字典中的不同键,要么循环遍历字符串一次,但多次遍历字典。取决于你认为哪个会更长。您正在实施的表情数量或 cmets 的长度?
-
循环搜索字典中的每个键不起作用,因为表情应该在字符串中出现时呈现。我还更新了这个问题,其中表情的“键”可能与另一个键发生碰撞。
标签: swift string algorithm pattern-matching substring