如何将seq中x的x转换为seq

时间:2016-09-14 16:45:27

标签: f# seq argument-unpacking

这是对此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.fstSeq.snd

我知道可以解压缩这些元素。我的问题是找到另一种方法来做到这一点,特别是考虑到x是一个System.Tuple。

2 个答案:

答案 0 :(得分:4)

x是两个string s的元组(我假设csvRow.[i]是),因为这就是你从序列中yield的方式。您可以在for循环中对其进行解构:

for (x,y) in mappedSeq1 do
   printfn "%s - %s" x y

如果您不想破坏x,则可以使用fst xsnd 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将按顺序生成列表。