-1

这是此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第二个 val 中,我们可以调用y. 如何转换x为序列,以便可以使用Seq.fstand Seq.snd

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

4

2 回答 2

4

x是两个strings 的元组(这是我假设csvRow.[i]的),因为这就是你yield从序列中得到的方式。你可以在你的for循环中解构它:

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

或者你可以使用fst xorsnd x如果你不想解构 x。

于 2016-09-14T17:51:27.447 回答
0

您的代码当前创建了一个序列,该序列读取行并生成第 2 列和第 5 列的元组。

如果要返回 Row0Col2 的序列;行0Col5;行1Col2;Row1Col5(两列需要是同一类型),然后使用

yield! [ csvRow.[2], csvRow.[5] ]

或者如果你想要一个序列序列 - [Row0Col2; 行0Col5];[行1Col2; Ro1Col5],然后使用

yield [ csvRow.[2]; csvRow.[5] ]

yield!将从列表中产生每个单独的项目,而yield只会按顺序产生列表。

于 2016-09-15T08:53:27.213 回答