【问题标题】:F# - generating a list of tuples from integer inputF# - 从整数输入生成元组列表
【发布时间】:2018-10-28 12:58:12
【问题描述】:

我应该从一个整数输入中返回一个元组列表。 例如: output' 4 应该返回一个元组列表:

[(1, 1);
(2, 1); (2, 2);
(3, 1); (3, 2); (3, 3);
(4, 1); (4, 2); (4, 3); (4, 4)]

现在我得到了

 [(1, 1); (1, 2); (1, 3); (1, 4);
 (2, 1); (2, 2); (2, 3); (2, 4);
 (3, 1);(3, 2); (3, 3); (3, 4);
 (4, 1); (4, 2); (4, 3); (4, 4)]

到目前为止我所拥有的:

let output' x =
    let ls= [1..x]
    ls |> List.collect (fun x ->[for i in ls -> x,i])    
output' 4

我不知道如何获得所需的输出。任何帮助,将不胜感激。

【问题讨论】:

    标签: list f# tuples collect


    【解决方案1】:

    您可以添加过滤器:

    ...
    |> List.filter (fun (a, b) -> a >= b)`
    

    let output x =
        [ for i in 1..x do
          for j in 1..i do yield (i,j)
        ]
    

    【讨论】:

      【解决方案2】:

      在 F# 中,它们主要使用序列,所以这里有一个序列驱动的惰性解决方案:

      let output' max =
          let getTuples x = 
              seq { 1 .. x }
              |> Seq.map (fun y -> (x, y))
      
          seq { 1 .. max }
          |> Seq.map getTuples
      

      如果您需要列表,请将seq { 1 .. x } 替换为[ 1 .. x ]。 它仍然比循环更具功能性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        相关资源
        最近更新 更多