Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 过滤坐标元组(F#)_.net_Arrays_F#_Type Conversion_Tuples - Fatal编程技术网

.net 过滤坐标元组(F#)

.net 过滤坐标元组(F#),.net,arrays,f#,type-conversion,tuples,.net,Arrays,F#,Type Conversion,Tuples,我有一个坐标数组(作为元组),如: 我想删除坐标(1,5)和(5,1)(如果我这样做,我将能够删除(2,2)和(3,3)),但我不知道怎么做 编辑 详细地说,我想删除所有元组,比如“(a,b)”,它们在同一数组中有一个“(b,a)”“对立”元素。(我不知道该由谁来更好地解释)诸如此类: let B = A.[1..A.Length-2] ?诸如此类: let B = A.[1..A.Length-2] ?如果您不介意二次复杂度: let B = A |> Array.filter (f

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

我想删除坐标(1,5)和(5,1)(如果我这样做,我将能够删除(2,2)和(3,3)),但我不知道怎么做

编辑

详细地说,我想删除所有元组,比如“(a,b)”,它们在同一数组中有一个“(b,a)”“对立”元素。(我不知道该由谁来更好地解释)

诸如此类:

let B = A.[1..A.Length-2]

诸如此类:

let B = A.[1..A.Length-2]

如果您不介意二次复杂度:

let B = A |> Array.filter (fun (a,b) -> 
    not (A |> Array.exists (fun (a',b') -> a=b' && b=a')))

如果您不介意二次复杂性:

let B = A |> Array.filter (fun (a,b) -> 
    not (A |> Array.exists (fun (a',b') -> a=b' && b=a')))

我敢肯定像这样的事情会更快

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
让hashTuple=function
|f,s当f>s->(s,f)
|f,s->(f,s)
let过滤器(a:序号)=
A.
|>顺序过滤器(乐趣(f,s)->f s)
|>Seq.countBy哈希元组
|>顺序过滤器(趣味g->snd g=1)
|>序列图fst

我很确定这样的东西应该更快

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
让hashTuple=function
|f,s当f>s->(s,f)
|f,s->(f,s)
let过滤器(a:序号)=
A.
|>顺序过滤器(乐趣(f,s)->f s)
|>Seq.countBy哈希元组
|>顺序过滤器(趣味g->snd g=1)
|>序列图fst


你能把关于(2,2)、(3,3)的部分说得更清楚些吗?我知道有一种规则,你想过滤掉哪些元素,然后是(1,5)和(5,1)。我这么说是因为在(1,5)和(5,1)的情况下,规则就像“对于(a,b)元组,如果有(b,a)元组,就删除它们。”在(2,2)和(3,3)的情况下规则也适用,所以它们也应该被删除。你能把关于(2,2)、(3,3)的那部分说得更清楚些吗?我知道有一种规则,你想过滤掉哪些元素,然后是(1,5)和(5,1)。我这么说是因为在(1,5)和(5,1)的情况下,规则就像“对于(a,b)元组,如果有(b,a)元组,就删除它们。”在(2,2)和(3,3)的情况下这个规则也适用,所以它们也应该被删除。它是如何工作的,为什么还有(2,2)和(3,3)元组?它将B声明为a的子数组,但它忽略了第一个和最后一个元素。这不是我要找的。我创建了一个示例。我需要过滤“(a,b)/(b,a)”元组。它是如何工作的,为什么仍然存在(2,2)和(3,3)元组?它将b声明为a的子数组,但它忽略了第一个和最后一个元素。这不是我要找的。我创建了一个示例。我需要过滤“(a,b)/(b,a)”元组。是的,这就是我需要的。我希望它支持大量的数据。谢谢,太慢了。有没有办法优化它?你可以尝试使用一个集合:让S=a |>Set.of数组;让B=S |>Set.filter(fun(a,B)->not(S |>Set.exists(fun(a',B')->a=B'&&B=a'))是一样的,Jindřich?是的,这就是我需要的。我希望它支持大量的数据。谢谢,太慢了。有没有办法优化它?你可以尝试使用一个集合:让S=a |>Set.of数组;让B=S |>Set.filter(fun(a,B)->not(S |>Set.exists(fun(a',B')->a=B'&&B=a'))是一样的,Jindřich?它更快,但还不够快。无论如何谢谢你!你需要多快?你应该能够将其与之并行。看这里。我需要对10k元组(aprox)使用它,并在不到1秒的时间内完成所有这些操作。无法安装集合。我对10万个元组运行了上面的代码,效果很好。在不到一秒钟的时间内跑10公里应该不是问题。它更快,但还不够快。无论如何谢谢你!你需要多快?你应该能够将其与之并行。看这里。我需要对10k元组(aprox)使用它,并在不到1秒的时间内完成所有这些操作。无法安装集合。我对10万个元组运行了上面的代码,效果很好。在不到一秒钟的时间内跑10公里应该不是问题。