过滤两个列表f#

时间:2014-08-23 05:47:07

标签: list recursion filter f#

我有两个字符串列表,一个包含满足某些条件的humanIds(humanosPosibles),另一个包含可能符合或不符合条件的humanIds的列表(likesTodo)。事情是,我需要创建一个包含的列表只有在LikeTodo和humanosPosibles中的人类ID。我尝试使用递归和list.filter。我会把你的代码给你,看看我做错了什么。如果您认为这不是最好的方法,请提出建议。

  let rec pasa (likesTodo:string list) (humanosPosibles:string list) x y =
        if (y < humanosPosibles.Length) then
            if (likesTodo.[x] = humanosPosibles.[y]) then
                true 
            else
                pasa likesTodo humanosPosibles x (y+1)  
        else
            false  

 let genteFiltrada = List.filter (fun x -> pasa likesTodo humanosPosibles 0 0 ) likesTodo

genteFiltrada对应于我需要创建的列表。我最后一次忘了说如果有一件喜欢托多的东西是重复的,我需要在新列表中两次。因此,设置将无法正常工作。

1 个答案:

答案 0 :(得分:2)

这是一个使用set的解决方案,因为你想要的是交集:

let intersectlists a b = 
    let la,lb = Set.ofList a, Set.ofList b
    Set.intersect la lb |> Set.toList
相关问题