У меня есть проблема, которую я упростил для этого вопроса.
Давайте просто скажем, что у меня есть 2 списка. Первый фактически представляет список классов, но для этой цели, допустим, это просто представляет список ints (2,4,6,8,10). У меня есть другой список ints, который представляет флаги, указывая, хочу ли я включать/исключать соответствующие значения из первого набора.
(Это не лучший пример, но должно быть достаточно для помощи мне решить мою реальную проблему.)F # Я хочу отфильтровать свой вывод
let set1 = [2;4;6;8;10]
let set2 = [1;0;0;1;1]
Мой требуемый выход набор:
[2;8;10]
Это мой код:
let solution =
List.map2 (fun a b ->
match b with
| 1 -> a
| _ -> 0
) set1 set2
Это производит следующие выходные данные:
val solution : int list = [2; 0; 0; 8; 10]
Как отфильтровать эти нежелательные нули?
Вместо | _ -> 0
Я в идеале хочу вернуть нуль, а затем отфильтровать все нули.
Ваша помощь будет высоко оценена!
Последние два могут быть заменены с помощью 'List.choose (fun (x, key) -> if key then Some x else None)' – bytebuster
... или даже 'List.choose (function (x, true)) -> Некоторые x | _ -> None) ' – bytebuster