| A of int
| B of string
| C
И есть список на входе: [A 10; B "value"]. А так же есть список с дефолными параметрами: [A 1; B "Text"; C].
И мне надо объединить эти два списка: первый список + значения из второго списка, конструкторов которых нет в первом.
Я решил это так:
let existParam parameters p =
match p with
| A _a -> List.exists
(function
| A _a -> true
| _ -> false)
parameters
| B _b -> List.exists
(function
| B _b -> true
| _ -> false)
parameters
| C -> List.exists
(function
| C -> true
| _ -> false)
parameters
let unionParams a b =
a
|> List.filter (fun x -> not (existParam b x))
|> List.append b
Никто не знает более элегантного способа написать функцию existParam?
я бы сделал в один проход с аккумулятором в виде некоего ключ значения тип(или ег обозначение) - и bool (представлен он в списке или нет) потом можно в existParams прокинуть этот аккумулятор и уже там чекать
Обсуждают сегодня