在大多數情況下在F#中編寫代碼會導致非常簡明直觀的工作。這段代碼看起來有點迫切和不方便。FP - 濃縮和'好'代碼
times
是浮子的值的數組
文件times.csv
內部行總是看起來像:
Mai 06 2011 05:43:45 nachm.,00:22.99
Mai 04 2011 08:59:12 nachm.,00:22.73
Mai 04 2011 08:58:27 nachm.,00:19.38
Mai 04 2011 08:57:54 nachm.,00:18.00
average
生成值的平均值,滴最低和最高時間getAllSubsetsOfLengthN
創建一個sequ所有連續子集的長度爲n
。有沒有更好的解決方案?或者在F#內核中已經存在類似的東西?bestAverageOfN
找到最低的平均所有子集
let times =
File.ReadAllLines "times.csv"
|> Array.map (fun l -> float (l.Substring((l.LastIndexOf ':') + 1)))
let average set =
(Array.sum set - Array.min set - Array.max set)/float (set.Length - 2)
let getAllSubsetsOfLengthN n (set:float list) =
seq { for i in [0 .. set.Length - n] -> set
|> Seq.skip i
|> Seq.take n }
let bestAverageOfN n =
times
|> Array.toList
|> getAllSubsetsOfLengthN n
|> Seq.map (fun t -> t
|> Seq.toArray
|> average)
|> Seq.min
的什麼我找的是更好的,更短的或更容易的解決方案。當然,每個有用的帖子都會被upvoted :)
這幾乎涵蓋了一切。很高興知道'Seq.windowed'。非常感謝! – fjdumont 2011-05-07 12:36:47