打印元组 F# 的列表

SBu*_*ryn 3 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
Run Code Online (Sandbox Code Playgroud)

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

Guy*_*der 5

注意:OP 已经好几个月没有出现了,所以这个答案可能永远不会得到接受投票。不要因此而阻止您认为这不是正确答案。

首先生成元组列表。
这使用两种不同类型的列表来使答案总体上更有用。

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

let listOfTuple:(int * string) list = List.zip myList myList2 
Run Code Online (Sandbox Code Playgroud)

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

示例1:

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

 printfn "%A" listOfTuple
Run Code Online (Sandbox Code Playgroud)

结果:

[(1, "a"); (2, "b"); (3, "c")]
Run Code Online (Sandbox Code Playgroud)

示例2:

List.iter与 一起使用printfn %A。当您知道数据是列表但不知道各个项目的类型时,这非常有用。

listOfTuple |> 
    List.iter (printfn "%A")
Run Code Online (Sandbox Code Playgroud)

结果:

(1, "a")
(2, "b")
(3, "c")
Run Code Online (Sandbox Code Playgroud)

示例3:

List.iter与元组解构函数一起使用,例如let (a,b) = values,获取元组的各个值。如果您想打印列表中每个项目的每个值,这非常有用。

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

结果:

1, a
2, b
3, c
Run Code Online (Sandbox Code Playgroud)

示例4:

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

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

结果

2
3
Run Code Online (Sandbox Code Playgroud)