Arrays 如何有效地搜索单词数组中的特定短语?
我需要的是从包含单词的数组2中的数组1中查找短语。假设一个数组包含[“Margaret是个女孩”;“Loves”;“Potato”;“Swime”],另一个数组是随机吐入数组的单词文本。如何有效地检查短语(一系列单词)和单词?Arrays 如何有效地搜索单词数组中的特定短语?,arrays,string,performance,f#,Arrays,String,Performance,F#,我需要的是从包含单词的数组2中的数组1中查找短语。假设一个数组包含[“Margaret是个女孩”;“Loves”;“Potato”;“Swime”],另一个数组是随机吐入数组的单词文本。如何有效地检查短语(一系列单词)和单词? 因为,按照我的想法,用老式的方式做这件事将是一个时间问题 如果您使用\uuuu0.exists或\uu0.forall函数,只要找到(非)匹配结果,它们就会短路,这将与for循环一样有效: let arr1 = [| "Margaret is a girl"; "Love
因为,按照我的想法,用老式的方式做这件事将是一个时间问题 如果您使用
\uuuu0.exists
或\uu0.forall
函数,只要找到(非)匹配结果,它们就会短路,这将与for循环一样有效:
let arr1 = [| "Margaret is a girl"; "Loves";"Potato"; "Swim" |]
let arr2 = [| "Margaret"; "is"; "a"; "girl" |]
let ``can be built from`` words phrase =
phrase
|> String.split ' '
|> Array.forall (fun word -> words |> Array.contains word)
let buildablePhrases = arr1 |> Array.filter (``can be built from`` arr2)
如果数组太大,而上面的代码仍然太慢,我想您需要开始引入优化—删除重复项、缓存最频繁的搜索等。哪些优化有意义取决于您处理的数据。您尝试了什么,具体是什么,你在挣扎吗?我已经尝试使用FOR循环对这个问题进行排序,并且多次使用相同的数组。。。我想改进它,缩短所需时间您的问题并不琐碎,如果您需要最佳性能,则需要一个非琐碎的解决方案。使用(aka-tries)可以高效地搜索大文本中的多个字符串。谢谢,我将尝试在我的代码中实现您的想法!