【问题标题】:Parsing nested list F# confused解析嵌套列表 F# 困惑
【发布时间】:2015-02-15 02:43:41
【问题描述】:

我有一个超过 3 年的雨量文本文件,其中年份后的每个数字对应于月份。 例如,在

2002    1.17    0.78    7.11    5.17    5.84    4.29    1.12    4.06    1.9 2.07    1.47    1.53
2001    1.24    3.22    1.61    3.33    6.55    2.4 3.5 1.32    3.9 6.04    1.69    1.13
2000    1.277   1.4 1.17    5.74    6.48    4.81    4.07    3.19    6.2 1.95    2.65    1.7

2002 年 2 月平均降雨量为 0.78。

我制作了一个元组列表,格式为 (year,values,average,min,max),其中 years 是 int,values 是一个浮点列表,average 是一个对所有“值”进行平均的 int,min 是一个int 保存最小的“值”和最大值。

我的问题:

我可以使用 List.minBy 第四个 mylist 和它来自的年份(因为它的单个元素)打印所有元组中的最小值,但是我是否将该数字对应于它来的月份来自?

我有

let TupleWithSmallestValue= List.minBy min biglist
 let (year,_,_,min,_) = TupleWithSmallestValue
 printfn"Min rainfall:\t%A; %A" min year

我当时在想一些事情:

List.map (fun (year,(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec), avg, min, max) -> somehow print the min and the month it came from )

但我知道这是错误的,我正在尝试处理每个值以使其对应于一个月,就像我在上面的示例中所做的那样。如果我的问题足够清楚,我该怎么做?我是一名 C++ 程序员,但我喜欢这种语言的风格。只是缺少一些基础知识。

【问题讨论】:

    标签: f# tuples


    【解决方案1】:

    这样的事情应该可以工作:

     let months = [ "Jan"; "Feb"; ...; "Dec" ]
     let (year, values, _, min, _) = TupleWithSmallestValue
     let month = values |> List.mapi (fun i x -> (i, x)) 
                        |> List.find (fun (m, v) -> v = min) 
                        |> fst 
                        |> List.nth months
    

    【讨论】:

    • ' if month = 0 then let it: string = "Jan" else if month = 1 then let it: string = "Feb" ' 这是将索引与月份对应的唯一方法吗?
    • 定义列表 [ "Jan"; "Feb"] 等等,并从该列表中获取第 n 个字符串;)我已经编辑了我的答案。注意让个... 是伪代码的一种形式 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多