过滤坐标元组(F#)

时间:2014-08-22 07:28:52

标签: .net arrays f# type-conversion tuples

我有一个坐标数组(如元组),如:

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)" "相反"同一数组中的元素。 (我不知道更好地解释谁)

3 个答案:

答案 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]