打印元组F#

时间:2017-03-11 14:39:01

标签: f#

我有一些我试图测试的代码,它应该将两个相同长度的int列表合并到一个元组列表中。我有它编译但我不知道它是否有效,因为我无法打印结果。

这是我到目前为止所做的:

    let myList = [5;15;20;25;30;200]
    let myList2 = [6;16;21;26;31;201]

    let rec tupleMaker (list1: int list) (list2: int list) =
        match list1, list2 with
        | (h1 :: tail1),(h2 :: tail2)->
          let (a,b) = (h1,h2)
          (a,b) :: tupleMaker tail1 tail2
        | _,_->
          []

    let z = tupleMaker myList, myList2
    //printfn z
    //printfn %A

printfn不起作用,我也没有尝试过任何其他任何帮助,我们将不胜感激。

2 个答案:

答案 0 :(得分:4)

您刚刚实施了List.zip

List.zip myList myList2    
//val it : (int * int) list =
//  [(5, 6); (15, 16); (20, 21); (25, 26); (30, 31); (200, 201)]

答案 1 :(得分:1)

注意:OP几个月以来都没有出现过,所以这个答案可能永远不会获得接受投票。不要让那阻止您认为这不是正确的答案。

首先生成元组列表。
这使用两种不同类型的列表使答案通常更有用。

let myList: int list = [1;2;3]
let myList2 : string list = ["a";"b";"c"]

let listOfTuple:(int * string) list = List.zip myList myList2 

有很多打印元组列表的方法,但是基本思想是使用List.iter访问列表中的各个元组,然后应用标准方法访问元组中的项目。

示例1:

这不使用List.iter。它仅使用printfn %A。当您试图找出为什么无法打印某些内容并且只需要在系统看到数据时查看数据时,此功能非常有用。

 printfn "%A" listOfTuple

结果:

[(1, "a"); (2, "b"); (3, "c")]

示例2:

这将List.iterprintfn %A一起使用。当您知道数据是列表但不知道单个项目的类型时,此功能很有用。

listOfTuple |> 
    List.iter (printfn "%A")

结果:

(1, "a")
(2, "b")
(3, "c")

示例3:

这将List.iter与元组解构函数结合使用,例如let (a,b) = values,以获取元组的各个值。如果要打印列表中每个项目的每个值,这将很有用。

listOfTuple |> 
    List.iter(
        fun values -> 
            let (a,b) = values
            printfn ("%i, %s") a b
    )

结果:

1, a
2, b
3, c

示例4:

这使用List.itermatch语句来获取元组的各个值。如果您要进行更复杂的处理,例如在打印之前进行过滤,或者对不同的值使用不同的打印消息和/或格式,则此功能很有用。

listOfTuple |>
    List.iter( 
        fun values ->
            match values with
            | (a,_) when a > 1 -> 
                printfn ("%i") a
            | (_,_) -> ()
    )

结果

2
3