这是对此SO-post的后续问题。
鉴于此代码块(csvData1是.csv文件。)
let mappedSeq1 = seq { for csvRow in csvData1 do yield (csvRow.[2], csvRow.[5]) }
for x in mappedSeq1 do
printfn "%A" x
如果我不想将序列中的每个元素解压缩到x
以及我们可以调用y
的第二个val,该怎么办?如何将x
转换为序列,以便我可以使用Seq.fst
和Seq.snd
?
我知道可以解压缩这些元素。我的问题是找到另一种方法来做到这一点,特别是考虑到x
是一个System.Tuple。
答案 0 :(得分:4)
x
是两个string
s的元组(我假设csvRow.[i]
是),因为这就是你从序列中yield
的方式。您可以在for
循环中对其进行解构:
for (x,y) in mappedSeq1 do
printfn "%s - %s" x y
如果您不想破坏x,则可以使用fst x
或snd x
。
答案 1 :(得分:0)
您的代码当前创建了一个序列,该序列读取行并生成第2列和第5列的元组。
如果要返回Row0Col2的序列; Row0Col5; Row1Col2; Row1Col5(两列需要属于同一类型),然后使用
yield! [ csvRow.[2], csvRow.[5] ]
或者如果你想要一系列序列 - [Row0Col2; Row0Col5]; [Row1Col2; Ro1Col5],然后使用
yield [ csvRow.[2]; csvRow.[5] ]
yield!
将从列表中生成每个单独的项目,而yield
将按顺序生成列表。