我有一个坐标数组(如元组),如:
let A = [|(1,5);(3,3);(4,5);(6,3);(5,1);(2,2)|]
我想删除坐标(1,5)和(5,1)(如果我这样做,我将能够删除(2,2)和(3,3))但我不想知道该怎么做。
修改
详细地说,我想删除所有元组,如"(a,b)"其中有一个"(b,a)" "相反"同一数组中的元素。 (我不知道更好地解释谁)
答案 0 :(得分:2)
如果你不介意二次复杂性:
let B = A |> Array.filter (fun (a,b) ->
not (A |> Array.exists (fun (a',b') -> a=b' && b=a')))
答案 1 :(得分:2)
我很确定这样的事情应该更快。
let hashTuple = function
| f, s when f > s -> (s, f)
| f, s -> (f, s)
let filter (a: seq<int*int>) =
a
|> Seq.filter (fun (f, s) -> f <> s)
|> Seq.countBy hashTuple
|> Seq.filter (fun g -> snd g = 1)
|> Seq.map fst
答案 2 :(得分:0)
类似的东西:
let B = A.[1..A.Length-2]