我是一名试图为我的班学习F#的学生。我一个人一直在稳步前进,但是遇到了一个我无法解决的问题。我被分配了读取数据并将其添加到CSV数据库文件的任务。我已经弄清楚了如何使用F Sharp.Data将数据分为列和行,但是在弄清楚如何对项目进行计数以及在列表中进行搜索以找到所需的数据时,我遇到了很多困难。我是一个视觉学习者,因此,如果我只看一些通过相似的字符串和浮点列表进行排序的示例,我可能会自己弄清楚。
这是我到目前为止所拥有的代码(我很the草,我还不是最擅长在此站点上发布代码,我对此表示歉意)
open System.IO
open System.Net
open F Sharp.Data
open System
[<Literal>]
let Template = __SOURCE_DIRECTORY__ + @"\students.txt" // Creating the directory
type Students = CsvProvider< Template > // I can format the list using FSharp.Data here
let students = Students.Load(Template)
let FirstRow = students.Rows |> Seq.head //Creating the header
let TMP = 0
let UTG = 0 //counter vars for later use
for rows in students.Rows do // Reading list correctly now have to figure out how to count elements
printfn "%A" rows.Last
//printfn "%A" TMP
//let tmp = Students.Parse //Graveyard of Trial and ERRO
//let tst = 0
//for Rows in students do
// tst = tst + 1
从我的代码中可以看到,我已经将列表分为几列和几行。如果有人可以向我展示如何做柜台以及在列表中搜索特定商品,将不胜感激。
我知道很多人只是在本网站上转储作业,并期望人们去做,这太糟糕了。如果您自己不做作业,就不会学习。我只需要一些帮助来更好地理解它。
最诚挚的问候-一位需要喝咖啡的CS专业学生,乔
答案 0 :(得分:1)
对数据集合(例如您的示例中的CSV文件的行)执行各种计数,搜索和过滤任务的最简单方法是使用内置的高阶函数进行集合处理。
Scott Wlaschin的Choosing between collection functions 文章中有很好的概述,其中也有许多可以帮助您的实际例子。
在您的示例中,您已经在使用Seq.head
,它为您提供了序列中的第一项:
students.Rows |> Seq.head
这是一个很好的开始。您可以使用Seq
模块中可用的其他功能来做许多其他事情。如果您输入Seq
,然后再输入.
,大多数编辑器将为您显示一个自动完成列表,其中包含所有可用功能(以上文章记录了它们的工作)。
例如,如果您想进行计数,Seq.length
可能会有用。对于各种过滤任务,请尝试Seq.filter
,最后,搜索Seq.find
。