Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
F#寻找唯一元组数组的进一步要求_F# - Fatal编程技术网

F#寻找唯一元组数组的进一步要求

F#寻找唯一元组数组的进一步要求,f#,F#,我有4个不同数据的数组。对于字符串的第一个数组,我想删除重复元素,并获得包含4个元素的唯一元组数组的结果。 例如,假设数组是: let dupA1 = [| "A"; "B"; "C"; "D"; "A" |] let dupA2 = [| 1; 2; 3; 4; 1 |] let dupA3 = [| 1.0M; 2.0M; 3.0M; 4.0M; 1.0M |] let dupA4 = [| 1L; 2L; 3L; 4L; 1L |] 我希望结果是: let uniqueArray = [

我有4个不同数据的数组。对于字符串的第一个数组,我想删除重复元素,并获得包含4个元素的唯一元组数组的结果。 例如,假设数组是:

let dupA1 = [| "A"; "B"; "C"; "D"; "A" |]
let dupA2 = [| 1; 2; 3; 4; 1 |]
let dupA3 = [| 1.0M; 2.0M; 3.0M; 4.0M; 1.0M |]
let dupA4 = [| 1L; 2L; 3L; 4L; 1L |]
我希望结果是:

let uniqueArray = [| ("A", 1, 1.0M, 1L); ("B", 2, 2.0M, 2L); ("C", 3, 3.0M, 3L); ("D",4,
感谢abatishchev的伟大代码,现在我有了这个答案:

let zip4 a (b : _ []) (c : _ []) (d : _ []) =
    Array.init (Array.length a) (fun i -> a.[i], b.[i], c.[i], d.[i])
let uniqueArray = zip4 dupA1 dupA2 dupA3 dupA4 |> Seq.distinct |> Seq.toArray
但是,更进一步,我想从唯一数组中查找每个数组的结果

let uniqueArray = [| ("A", 1, 1.0M, 1L); ("B", 2, 2.0M, 2L); ("C", 3, 3.0M, 3L); ("D",4, 4.0M, 4L) |]
我想要uniqeArray中的以下4个阵列:

let uniqA1  = [| "A"; "B"; "C"; "D" |]
let uniqA2 = [| 1; 2; 3; 4 |]
let uniqA3 = [| 1.0M; 2.0M; 3.0M; 4.0M |]
let uniqA4 = [| 1L; 2L; 3L; 4L |]
我尝试了以下代码:

let [| uniqA1, uniqA2, uniqA3, uniqA4 |] = uniqueArray
首先,我得到编译器警告:

警告1
此表达式上的模式匹配不完整。例如,值“
[| | |]
”可能表示模式未涵盖的情况

在使用
#nowarn“25”
之后,在运行时,我得到了以下错误:

Microsoft.FSharp.Core.MatchFailureException was unhandled
Message: An unhandled exception of type 'Microsoft.FSharp.Core.MatchFailureException' occurred in Program.exe

请帮助我了解更多要求。

您现在需要
unzip4

let unzip4 arr =
    let a = Array.zeroCreate (Array.length arr)
    let b = Array.zeroCreate (Array.length arr)
    let c = Array.zeroCreate (Array.length arr)
    let d = Array.zeroCreate (Array.length arr)
    arr
    |> Array.iteri (fun i (x, y, z, w) ->
        a.[i] <- x
        b.[i] <- y
        c.[i] <- z
        d.[i] <- w)
    a, b, c, d

如果你完成了上一个问题,你应该将答案标记为正确。abatishchev没有编写该代码。是@Ramon Snir编写了代码。请给帮助过你的人学分。嗨,谢谢你的反馈,我可能会把错误的学分弄错,我会在以后更改它;但我看不出我怎样才能把这个问题标记为已回答。请给我指路。再次感谢你的帮助!您好,非常感谢您的优秀代码,它工作得非常好。然而,我仍然不知道如何将答案标记为正确。如果我知道的话,我会做这件事,并赞扬你的工作。再次感谢您的及时帮助!在柱子的左边,有上/下箭头,下面有一个v形按钮。点击按钮(如果你想说答案是好的,点击向上箭头!)接受答案。
> let uniqA1, uniqA2, uniqA3, uniqA4 = unzip4 uniqueArray;;

val uniqA4 : int64 [] = [|1L; 2L; 3L; 4L|]
val uniqA3 : decimal [] = [|1.0M; 2.0M; 3.0M; 4.0M|]
val uniqA2 : int [] = [|1; 2; 3; 4|]
val uniqA1 : string [] = [|"A"; "B"; "C"; "D"|]