【发布时间】:2015-02-14 06:19:20
【问题描述】:
//Return a tuple from a text file:
let ExtractFromLine (line:string) =
let strings = line.Split('\t') //data members are spaced by tab
let strlist = Array.toList(strings) //each data member is now a list of str
let year = System.Int32.Parse(strlist.Head) //year is first in file, so Head
let values = List.map System.Double.Parse strlist.Tail //tail are all values
let average = List.average values //not part of text file
let min = List.min values //not part of text file
let max = List.max values //not part of text file
(year, values, average, min, max) //return tuple with all info
//----------
let rec createList fileline =
if fileline = [] then
[]
else
let (year, values, average, min, max) = ExtractFromLine fileline.Head
let l = (year, values, average, min, max) :: createList fileline.Tail
l
//------------
let main argv =
let file = ReadFile "data.txt"
let biglist = createList file //recursive function to make a list of tuples
printfn"%A" biglist //This prints the year, all values, average, min, and max for each tuple created
我现在有一个巨大的元组列表,其中包含我需要的所有信息。 我是否保留了访问内部所有元素并对其执行计算的可能性?我使用 C++ 编程,并且该解决方案在该语言中是可行的,但在我看来 F# 要强大得多。我确信它是可能的,我只是缺少基础知识。
例如,如何打印所有年份的所有值的平均值? 我正在考虑一个 for 循环,但我不确定如何迭代。
for(all tuples in biglist)
printfn"%A:%A" tuple.year tuple.average
这显然是错误的,但我想你们明白我想要做什么。
上述问题涉及一次从列表中的一个元组中提取数据。 如果我想打印最大的平均值怎么办?这将涉及访问每个元组的平均数据成员并比较它们以返回最大的。我是否必须创建另一个包含这些平均值的列表?
我了解了 fst 和 snd,但我很难将其应用到这个示例中。 如果问题太多,您不必回答所有问题,但是当我开始使用这种语言时,非常感谢您提供任何帮助,谢谢
【问题讨论】: