2010-06-17 65 views
3

我有一個元組列表中有三個值的元組列表f#一個列表到另一個列表?

我想從元組中創建一個新的字符串列表。

List [(string * string * int) ] 

List[ for i in columns -> i.getfirstvalueintuple] 

我該怎麼做?非常基本的問題,但我無法弄清楚。

還有沒有其他方式建立另一種列表或seq從現有列表中?

回答

8
seq { for (first, _, _) in lst do yield first };; 

這給出了一個序列。您也可以使用List.map

lst |> List.map (fun (first, _, _) -> first);; 

其中給出了一個列表。

+0

由於它的偉大工程 也可以請你描述一下;;在list.map語句的末尾。試圖找到msdn的參考,但無法找到它 – mamu 2010-06-17 17:33:56

+0

@mamu它是特定於交互式shell(fsi)。它會終止輸入並進行評估。你可以刪除它們。 – Artefacto 2010-06-17 17:47:24

+3

請注意,你也可以做一個'[for(first,_,_)in firstst yield first]'這與seq語法相同,但立即給出一個列表 – 2010-06-17 18:27:30

8

你只需要一個List.map與「項目」功能:

let newList = List.map (fun (x, _, _) -> x) orgList 

List.map接受一個函數和一個列表和功能適用於每個項目在列表中。 (fun (x, _, _) -> x)解包元組並返回第一個項目。

HTH, 羅布

0

如果你想你也可以做到這一點的值的2/3:

let newList = oldList |> List.collect (fun (a,b,_) -> [a;b]) 
-3

內置函數fst提取元組的第一個元素,所以你可以地圖fst在名單:

lst |> List.map fst 

(* 'a*'b*'c list -> 'a list *) 
+1

'fst'和'snd'只能在2元組上工作。 – Brian 2010-06-18 09:21:54

相關問題