如何有效地搜索单词数组中的特定短语?

时间:2017-12-28 20:05:05

标签: arrays string performance f#

我需要的是从包含单词的数组2中的数组1中查找短语。让我们说阵列一包含[“玛格丽特是一个女孩”; “爱”;“土豆”; “游泳”],另一个是随机吐出的数据。如何有效地检查短语(一系列单词)和单词? 因为,按照我认为的方式,做老式的方式将成为时间问题。

1 个答案:

答案 0 :(得分:2)

如果您使用__.exists__.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)

如果数组很大并且上面的代码仍然太慢,我想你需要开始引入优化 - 删除重复项,缓存最频繁的搜索等等。哪些优化有意义取决于你正在处理的数据用。