如何将for x in seq的x转成seq

How to convert the x of for x in seq to seq

这是 的后续问题。

鉴于此代码块(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.fstSeq.snd

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

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

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

或者如果你不想解构 x,你可以使用 fst xsnd x

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

如果要return一个Row0Col2的序列;行 0 列 5;行 1 列 2; Row1Col5(两列需要是同一类型),然后使用

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

或者如果你想要一系列序列 - [Row0Col2; Row0Col5]; [行 1 列 2; Ro1Col5],然后使用

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

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