我有两个字符串列表,一个包含满足某些条件的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对应于我需要创建的列表。我最后一次忘了说如果有一件喜欢托多的东西是重复的,我需要在新列表中两次。因此,设置将无法正常工作。
答案 0 :(得分:2)
这是一个使用set的解决方案,因为你想要的是交集:
let intersectlists a b =
let la,lb = Set.ofList a, Set.ofList b
Set.intersect la lb |> Set.toList