2016-09-14 87 views
-1

這是對此SO-post的後續問題。如何將x的seq轉換爲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。

+0

*「什麼是'x'?」*您是否在使用帶有類型信息的開發工具?例如,在Visual Studio中,通過將鼠標懸停在其上,可以看到「x」的類型。 –

+0

是的,x是一個System.Tuple,但我不能將代碼構造爲使用Seq.fst等等。 – octopusgrabbus

+0

我已經刪除了什麼是OP的x部分。基本上,我想從System.Tuple中取出第一個或第二個元素而不打開包裝。這或多或少是一個學術要求。我只想知道是否有另一種方式。 – octopusgrabbus

回答

4

x是兩個string秒的元組(這是我認爲csvRow.[i]是),因爲從序列是你yield如何。你可以解構它就在你for循環:

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

,或者您可以使用fst xsnd x,如果你不想解構X。

+0

我不想破壞x。由於沒有更好的方式來描述它,我想將x轉換爲Seq,所以我可以使用Seq的方法。 – octopusgrabbus

+0

'fst' /'snd'確實在內部破壞了元組...... – scrwtp

+1

我不太明白你想如何「將x投向Seq」。 'x'是一個元組,而不是一個序列,所以你不能將它「轉換」爲一個。你的意思是你想用它的兩個元素創建一個序列?然後你可以創建一個列表'[x; Y]'。你的意思是別的嗎? –

0

您的代碼當前創建的順序讀取行和生產2列和5

如果你想返回Row0Col2序列的元組; Row0Col5; Row1Col2; Row1Col5(兩列將需要同一類型的),然後使用

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

或者,如果你想序列的序列 - [Row0Col2; Row0Col5]; [Row1Col2; Ro1Col5],然後用

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

yield!將產生從列表中各個項目,而yield只會產生在序列名單。

相關問題